Ich lese gerade ein "Lerne C"-Buch und bin auf eine Frage gestoßen, die ich wirklich nicht verstehe. Der Zweck der Übung ist es, das Problem dieses Codes zu finden:
char c;
c = 'a';
printf("c hält das Zeichen %c.",c);
..und dann wird die Erklärung gegeben, dass: "Der Textstring "a" aus zwei Zeichen besteht, sowohl 'a' als auch das terminierende Nullbyte. Die Variable c hat nur eine Größe von einem einzigen Byte. Selbst wenn c 2 Bytes lang wäre, könntest du einen Textstring auf diese Weise nicht kopieren. Versuche den Text ein Byte nach dem anderen in eine ausreichend große Variable zu kopieren, um den Textstring und sein terminierendes Nullbyte zu speichern."
Als ich jedoch den obigen Code ausführte, funktionierte er einwandfrei. Ich dachte, ich hätte die Theorie verstanden, warum es schlecht ist - das ganze terminierende 0 am Ende einer Zeichenfolge, also schrieb ich den Code um, um es zu testen:
char c[2];
*c = 'a';
printf("c hält das Zeichen %c.",c);
Aber das führt zu einem Problem. Ich fange an, verwirrt zu werden, was das Problem betrifft. Würde dieser zweite Code nicht den Buchstaben 'a' dem Zeiger bei c[0] übergeben und dann das terminierende 0 bei c[1] setzen - und somit die 2 Plätze im Array vollständig nutzen?
3 Stimmen
Ich nehme nicht an, dass es doppelte Anführungszeichen um das a in Zeile 2 herum gab? (c = "a";) Das würde fehlschlagen, um ... da ein einzelnes Anführungszeichen ein Zeichen ist und alles in doppelten Anführungszeichen ein String ist (also nullterminiert).
0 Stimmen
Dein erstes Beispiel ist zu 100 % korrekt, es gibt keine Probleme damit. Bist du sicher, dass du es korrekt kopiert hast?
0 Stimmen
Vielen Dank, Jungs, ihr hattet recht - das Beispiel im Buch hatte doppelte Anführungszeichen. Sie haben jedoch nicht erwähnt, was eine der Antworten feststellt, dass doppelte Anführungszeichen nullterminiert sind und einfache Anführungszeichen nur ein Zeichen sind. Vielen Dank.