PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C: char-Variablen ändern?


mf_2
2004-02-10, 20:08:58
Hallo,

Ich habe in C zwei char-Variablen, eine mit 10 und eine mit 5 Stellen. Die erste heisst Satz und die zweite Satz2.
Satz hat folgenden Inhalt: "Ich mag C"
Satz2 soll das "Ich" aus Satz bekommen.
Ich hab das mir dem folgenden Codeschnipsel versucht:

for (i=0;i<=2;i++)

{

satz2[i] = satz[i];

}

Das geht aber nicht.
Was ist daran falsch?

Crushinator
2004-02-10, 20:24:20
Deine Schleife zählt nur von 0 bis 1 (weil solange < 2) und damit dürftest Du schonmal maximal "Ic" in satz2 haben. ;)

mf_2
2004-02-10, 20:40:46
Sry, da hat ein "=" gefehlt, ich hab den Beitrag mal editiert. Funzt aber trotzdem noch ned.

Dr.Doom
2004-02-10, 20:45:49
Was genau geht denn nicht?
Schreib' das ganze Programm hin.

zeckensack
2004-02-10, 20:46:37
Der kopierte String ist nicht terminiert. Nachdem du die drei Zeichen kopiert hast, musst du eine 0 ans Ende setzen (sonst wissen die diversen String-Funktionen nicht, wo das Ende sein soll).

Also
satz2[3]=0;

mf_2
2004-02-10, 20:50:25
Danke für die schnelle Antwort!
Deine Antwort wirft gleich die nächste Frage auf :D :
Wenn ich eine Zeile aus einer Datei auslese und sie in einen Puffer schreibe, wird dieser automatisch terminiert oder muss ich das per Hand machen?

Dr.Doom
2004-02-10, 20:50:59
Original geschrieben von zeckensack
satz2[3]=0;
Ist das dasselbe wie satz2[3]='/0';?

Gnafoo
2004-02-10, 21:20:11
Original geschrieben von mf_2
Danke für die schnelle Antwort!
Deine Antwort wirft gleich die nächste Frage auf :D :
Wenn ich eine Zeile aus einer Datei auslese und sie in einen Puffer schreibe, wird dieser automatisch terminiert oder muss ich das per Hand machen?

Kommt ganz darauf an, was für Funktionen du benutzt, oder ob der
String in dem File schon mit terminierender 0 drinsteht etc.

Beim binären einlesen musst du dich warscheinlich selbst um die
0 kümmern, d.h. sie entweder schon in der Datei stehen haben, oder
sie nach dem lesen dranhängen.

Bei fscanf etc. wird die 0 wahrscheinlich schon von der Funktion
drangehängt.

Also je nach Situation.

Original geschrieben von Dr.Doom
Ist das dasselbe wie satz2[3]='/0';?

Das selbe wie satz2[3]='\0'; :)

mf_2
2004-02-10, 21:24:18
Zum Lesen verwende ich fgets ist das binär?
PS: ich hab keine 0 in der Datei drinstehen.

Dr.Doom
2004-02-10, 21:39:22
Original geschrieben von Der Tod
Das selbe wie satz2[3]='\0'; :)
Öhm, ja, das meinte ich auch. Aber gut, nun habe ich wieder was, um 3 Zeichen einzusparen. ;)

Gnafoo
2004-02-10, 22:05:57
man fgets unter linux meint:

fgets() reads in at most one less than size characters from stream and
stores them into the buffer pointed to by s. Reading stops after an
EOF or a newline. If a newline is read, it is stored into the buffer.
A '\0' is stored after the last character in the buffer.


Also wird ne 0 drangehängt.