Hi @ all,
habe da ein sehr merkwürdiges Problem. Ich will eigentlich nur einen
String mit gets() einlesen. Wenn ich den eingegebenen Wert danach mit
printf auf dem Bildschirm ausgebe, stimmt alles noch.
Wenn ich mir s1 aber anschaue, stelle ich fest, dass s1 immer den
gleichen Wert hat. Also zum Bsp.("x[7]_][]as]x]"). Bei s[0] wird also
auch x angezeigt, bei s[1] [ usw.
Trotzdem erscheint das Eingegebene immer richtig mit printf. Kann sich
das einer erklären?????????
Und warum schreibt dieses verdammte Programm den verdammten Wert nicht
einfach in den angegebenen verdammten Speicherplatz rein ???????
Wäre sehr dankbar für Hilfe.
VG Johnny5
static char s1[50];
.
.
.
//************************************************
void getCharacter () {
printf("Eingabe: ");
gets(s1);
printf("%s",s1);
}
//************************************************
Also du ruft die Funktion gets() auf, gibst "x[7]_][]as]x]" ein. Und in s1 steht dann "x[7]_][]as]x]" also in s[0] steht ein x, in s[1] ein [ usw. Und wenn du s1 mit printf() ausgibst, dann wird "x[7]_][]as]x]" ausgegeben. Verdammt, das ist tricky! Aber mal im Ernst: Mit WAS übersetzt du das Programmfragment und gibt es auch ein komplettes Fehlerprogramm? WIE und WANN schaust du in s1 und s[0]... (schätze mal das soll s1[0] heissen) nach? Vielleicht ist DAS falsch!
@ Stefan:
Also was ich eigentlich gemeint hab ist: S1 hat zu Beginn immer
irgendeinen Startwert, was ja auch nicht weiter schlimm ist. Nur ich
kann diesen Wert nie wieder ändern mit gets(s1). S1 bleibt immer gleich
dem Startwert. Das komische ist, dass, wenn ich printf("%s",s1); aufrufe
das vorher mit gets(s1) Eingegebene auf dem Bildschirm erscheint. Wo
wird das also gespeichert, wenn doch in s1 nur der Startwert steht??
Sorry, hab mich wahrscheinlich nicht klar ausgedrückt.
Mit s1[0] hast recht gehabt, wollte damit aber nur sagen, dass s1
wirklich nur immer den gleichen Startwert gespeicher hat.
Das Programmfragment lass ich von meinem Compiler ganz normal übersetzen
und ich kann durch mein Programmierkabel ein und Ausgaben auf dem
Bildschirm machen.
Gruss Johnny5
Hei Man, schaust du dir die Werte von s1 oder was auch immer bloss im Debugger an, oder liest du sie wirklich aus, weil im Debugger werden die Werte womoeglich nicht gut aktualisiert oder er geht einfach ent gescheit. Versuch mal das.
> Das Programmfragment lass ich von meinem Compiler ganz normal übersetzen
Schön für dich.
Wenn wir das auch könnten (dein Programm übersetzen),
dann könnte sich wer aufmachen und das mal tun und
nachsehen was da so alles passiert.
So aber: können wir nur raten.
Noch was. Das hat zwar jetzt nichts mit deinem aktuellen Problem zu tun, aber ... gets() ist eine No-No Funktion. Es gibt Leute, die sind der Meinung, dass Programmierer die gets() benutzen sofort an die Wand gestellt werden sollten. So mit Augenbinde und letzter Zigarette und so. Ich bin da nicht ganz so radikal. Entzug der Bürgerrechte und lebenslanges Programmierverbot würden mir schon reichen :-) gets() - pfui fgets() - bravo
Karl Heinz, hast du das Warum bewusst aus didaktischen Gründen weggelassen? Die brennende Zündschnur an gets() ist, dass überhaupt kein Schutzmechanismus vorhanden ist, um zu verhindern, dass über die Grenzen es Zielpuffers hinausgeschrieben wird. Solange Zeichen außer Newline kommen, wird gnadenlos in den Puffer geschrieben... bis zum berühmten Pufferüberlauf. http://de.wikipedia.org/wiki/Puffer%C3%BCberlauf
Danke für die Antworten und Tipps,
es geht jetzt, der Debugger hat gesponnen und andauernd falsche Werte
angezeigt.
Es ist jez aber ein neues Problem aufgetaucht.
Ich will eigentlich nur einen String s2(immer 8 Zeichen lang) an einen
andern s anhängen. Ich benutze strcat(s,s2). Beide Strings sind
nullterminiert.
Wenn ich aber mehr als 12 Zeichen beim ersten String habe, wird der
Anhang immer kuerzer, bis dann bei 18 Zeichen gar nichts mehr angehaengt
wird. Das versteh ich nicht, ich habe doch beide Strings mehr als
grosszügig dimensioniert. Hat jemand eine Ahnung warum das anhängen nur
bei kurzen Strings geht, die Fkt strcat ist nämlich nicht limitiert.
UND: Wenn ich die char-Zeichen einzeln(wie unten im Code ersichtlich)
übergebe, hat das genau den gleiche Effekt, dass bei Basisstring über 12
Zeichen gekürzt wird. BAHNHOF???????????
VG Johnny5
.
.
root char s1[50],s2[50];
.
.
root void SerDTransmitt(char *s) { //als Argument wird s1
eingesetzt
sum=Calculate(s); //Fkt liefert best. Wert zurück
ltoa(sum,s2); //long wird in String gewandelt(funzt auch)
strcat(s1,s2); //hier liegt die Wurzel alles Bösen
/* s1[16]=s2[0]; //Bei deiser variante ergibt sich der genau
gleiche
s1[17]=s2[1]; //Effekt
s1[18]=s2[2];
s1[19]=s2[3];
s1[20]=s2[4];
s1[21]=s2[5];
s1[22]=s2[6];
s1[23]=s2[7];
s1[24]='\0'; */
.
.
.
}
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.