Hallo, Ich habe folgende Frage zu diesem Programmausschnitt: [..] int main() { char wort[10]; wort[0]='B'; //(1) wort[1]='i'; wort[2]='l'; wort[3]='d'; wort[4]='\0'; [..] Zu //(1) - warum muss das B hier in ' ' stehen und nicht in normalen Anführungszeichen(" ")? In dem eindimensionalen char-Array können ja 10 Werte gespeichert werden. Aber Halt! Eigentlich sind es ja nur neun, weil am Ende jeder String eine binäre Null stehen muss. Aber warum muss sie das? Kann mir das jemand erklären? Viele Dank schonmal im vorraus! Gruss Daniel -- clusterix.perl@gmx.de
Am Samstag, 28. Februar 2004 14:45 schrieb Daniel Feist:
Hallo, Ich habe folgende Frage zu diesem Programmausschnitt:
[..]
int main() { char wort[10]; wort[0]='B'; //(1) wort[1]='i'; wort[2]='l'; wort[3]='d'; wort[4]='\0';
[..]
Zu //(1) - warum muss das B hier in ' ' stehen und nicht in normalen Anführungszeichen(" ")?
Ist in C halt so definiert, andere Sprachen regeln das anders: "" -> String '' -> Zeichen, quasi nur ein Repräsentant des ASCII-Werts der dahinter steht.
In dem eindimensionalen char-Array können ja 10 Werte gespeichert werden. Aber Halt! Eigentlich sind es ja nur neun, weil am Ende jeder
Richtig.
String eine binäre Null stehen muss. Aber warum muss sie das? Kann mir das jemand erklären? Viele Dank schonmal im vorraus!
Die Null ist auch ein Wert, dass die hinten steht, ist bei C für Strings eben so geregelt. Wenn Du nur Einzelzeichen oder Zahlen in dem Array ablegst, muss da keinesfalls ne Null hinten dran stehen. Warum das so ist, Frag Dennis M. Ritchie und Brian W. Kernighan die haben das so definiert. Ich Programmier z.B. Hauptberuflich meist in PL/1 auf nem IBM Großrechner, da ist die Sache anders gelagert ein zehn Zeichen langer String nimmt exakt 10 Zeichen auf, auch bei der Ausgabe werden zehn ausgegeben, zum löschen muss das Ding dann auch von vorne bis hinten mit Leerzeichen gefüllt werden (ok, ist recht einfach, weil beim Füllen immer der Rest mit Leerzeichen aufgefüllt wird) und Strings stehen in ''. -- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/ | http://packman.links2linux.de/ Manfred | http://www.knightsoft-net.de
Hi
Hallo, Ich habe folgende Frage zu diesem Programmausschnitt:
[..]
int main() { char wort[10]; wort[0]='B'; //(1) wort[1]='i'; wort[2]='l'; wort[3]='d'; wort[4]='\0';
[..]
Zu //(1) - warum muss das B hier in ' ' stehen und nicht in normalen Anführungszeichen(" ")?
Weil B ein char ist und "" fuer Zeichenketten (Arrays of char) verwendet werden
In dem eindimensionalen char-Array können ja 10 Werte gespeichert werden. Aber Halt! Eigentlich sind es ja nur neun, weil am Ende jeder String eine binäre Null stehen muss.
Am Ende eines Strings ja. Aber nicht, der Deutlichkeit wegen, am Ende eines jeden Arrays.
Aber warum muss sie das? Kann mir das jemand erklären? Viele Dank schonmal im vorraus!
Die Funktionen, die Strings erarbeiten, brauchen das, um das Ende des Strings zu erkennen. Bye -- 1 Bodo Kaelberer 123 http://www.webkind.de/ 3 4 Politik ist, wenn viele sich streiten und keiner sich freut.
Hi Willi! Willi Marquart schrieb:
char wort[10]; In dem eindimensionalen char-Array können ja 10 Werte gespeichert werden.
Nein, [0]-[10], das sind 11 Werte.
Aber mit 'char wort[10];' wird ein Array der Länge 10 deklariert. Das darf folglich nur mit wort[0] bis wort[9] angesprochen werden. wort[10] zeigt in einen anderen Speicherbereich. Es können also nur 10 Werte gespeichert werden. Gruß, Michael P.S.: Sorry für die PM. War ein Versehen.
On Saturday 28 February 2004 15:03, Willi Marquart wrote:
char wort[10]; In dem eindimensionalen char-Array können ja 10 Werte gespeichert werden.
Nein, [0]-[10], das sind 11 Werte.
Quatsch.
wort[0] bis wort[9] dürfen hier verwendet werden, nichts anderes.
CU
--
Stefan Hundhammer
Moin, * Daniel Feist wrote (2004-02-28 14:45):
Ich habe folgende Frage zu diesem Programmausschnitt:
[..]
int main() { char wort[10]; wort[0]='B'; //(1) wort[1]='i'; wort[2]='l'; wort[3]='d'; wort[4]='\0';
[..]
Zu //(1) - warum muss das B hier in ' ' stehen und nicht in normalen Anführungszeichen(" ")?
Mit normalen Anführungszeichen bekommst Du einen C-String, also so: {'B', '\0'} Mit den einfachen Anführungszeichen bekommst Du also ein einzelnes Zeichen, wenn Du es haben willst. Du hättest das oben mit gleichem Ergebnis auch so schreiben können: char wort[10] = "Bild";
In dem eindimensionalen char-Array können ja 10 Werte gespeichert werden. Aber Halt! Eigentlich sind es ja nur neun, weil am Ende jeder String eine binäre Null stehen muss.
Das sind dann schon zehn, oder?
Aber warum muss sie das?
In einem char-Array kann stehen, was Du willst, erst wenn Du einen gültigen C-String haben willst, muß dieser mit \0 abschließen. Das ist die Konvention für diese Strings, die auch von anderen Funktionen eingehalten wird. Thorsten -- Basically, any affirming superlative describes Mutt accurately and well. - David T-G
Hallo,
* Daniel Feist
Ich habe folgende Frage zu diesem Programmausschnitt:
[..]
int main() { char wort[10]; wort[0]='B'; //(1) wort[1]='i'; wort[2]='l'; wort[3]='d'; wort[4]='\0';
[..]
Zu //(1) - warum muss das B hier in ' ' stehen und nicht in normalen Anführungszeichen(" ")? In dem eindimensionalen char-Array können ja 10 Werte gespeichert werden. Aber Halt! Eigentlich sind es ja nur neun, weil am Ende jeder String eine binäre Null stehen muss. Aber warum muss sie das? Kann mir das jemand erklären? Viele Dank schonmal im vorraus!
ich habe jetzt zwar alle Antworten gelesen, nur irgendwie fehlte mir was. In C sind Strings Arrays von Charactern. Ein Array in C ist nichts anderes als der Zeiger auf die Adresse des ersten Arrayelements. Somit ist test[2] nichts anderes als *( test + 2 ). Die Länge eines Arrays ist in C unbekannt und damit die Länge von Strings. Nun muss ja irgendwie festgelegt sein, wie lang ein String ist. Anstatt sich die Länge irgendwo zu speichern ist man dermaßen vorgegangen dass man gesagt hat, dass jeder String mit '\0' terminiert wird. Damit spart man sich eine Längeninformation. Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ Faulheit ist die Angewohnheit, sich auszuruhen, bevor man müde ist. -- (unbekannt)
participants (8)
-
Bernhard Walle
-
Bodo Kaelberer
-
Daniel Feist
-
Manfred Tremmel
-
Michael Wenger
-
Stefan Hundhammer
-
Thorsten Haude
-
Willi Marquart