Ich habe eine Frage zum besseren Unterschätzen, wie Arrays und Nullbytes in C arbeiten.C-Arrays und Null-Byte
Nehmen wir an, ich habe eine int-Array von 13 Zellen. Lassen Sie uns sagen, ich möchte Zellen Nummer: 1, 2, 3 und 10 einen Wert haben. Die anderen, die als Standard übrig sind, erhalten automatisch den Nullchar \ 0 als Wert?
Mein Verständnis von \ 0 war, dass das Nullbyte immer am Ende des Arrays ist und seine Funktion ist, dem Programm mitzuteilen, wo Array endet. Aber scheint falsch zu sein
ich eine einfache prog schrieb, um zu überprüfen, und wie es scheint, das heißt:
int nums[13] = {1,2,3};
nums[10] = 69;
int i;
for(i=0;i<13;i++) {
if(nums[i]=='\0') {
printf("null char found! in position: %d\n",i);
}
else {
printf("element: %d found in position: %d of int array\n",nums[i],i);
}
}
return 0;
hier ist die Ausgabe:
Element: 1 in Position gefunden: 0 von int Array
Element 2 in Position gefunden: 1 von int array
Element: 3 in Position gefunden: 2 von int array
null char gefunden! in Position: 3
null char gefunden! in Position: 4
null char gefunden! in Position: 5
null char gefunden! in Position: 6
null char gefunden! in Position: 7
Nullstelle gefunden! in Position: 8
null char gefunden! in Position: 9
Element 69 in Position gefunden: 10 von int array
null char gefunden! in Position: 11
null char gefunden! in Position: 12
| 1 | | 2 | | 3 | | \ 0 | | \ 0 | | \ 0 | | \ 0 | | \ 0 | | \ 0 | | 69 | | \ 0 | | \ 0 | | \ 0 |
Warum also Standardzellen mit dem Wert \ 0 gesetzt? anstatt zum Beispiel leer zu bleiben?
Sollte das Nullzeichen nicht nur einmal am Ende des gesamten Arrays sein? Danke
Statisch zugeordneter Speicher wird mit 0 für Skalare oder NULL (\ 0) für Zeiger gefüllt. Wenn Sie \ 0 als Skalar darstellen, wird es in 0 umgewandelt. Es gibt keine "leeren" Objekte. Sie sollten NULL (\ 0) trotzdem nicht mit einem int vergleichen, verwenden Sie ein Literal 0. – Tibrogargan
"Mein Verständnis von \ 0 war, dass das Nullbyte immer am Ende des Arrays ist .." ist völlig falsch. Sie verwechseln reguläre Arrays und C-Strings. – usr2564301
@Tribrotargan '\ 0' (das NUL-Zeichen) ist nicht dasselbe wie der' NULL'-Zeiger. '\ 0' ist ein Byte, bei dem alle Bits auf 0 gesetzt sind, was immer gleich dem 'int'0 ist. – Kninnug