Nullterminator ?
-
Hey, ich habe folgenden Code:
#include <iostream> #include <stdlib.h> using namespace std; int main() { char szA[4]; szA[0] = 'H'; szA[1] = 'a'; szA[2] = 'l'; szA[3] = 'l'; szA[4] = 'o'; cout << szA; return 0; }Warum wird bei diesem Beispiel Nach "Hallo" noch ein-zwei seltsame Zeichen ausgegeben und bei szA[5] nicht ? Hat es was mit diesem ominösen Nullterminator zutun ? Kann mir das jemand genauer erklären ?
-
char szA[4]; szA[0] = 'H'; szA[1] = 'a'; szA[2] = 'l'; szA[3] = 'l'; szA[4] = 'o';szA hat 4 Elemente (0 - 3) und nicht 5 (0 - 4).
Das Terminierungszeichen ('/0') muss an letzerstelle (szA[3] = '\n').
-
Tschuldigung, hab einen Fehler im vorigen Post

szA[3] = '/0'
-
Du hast immer noch einen, es heißt '\0'. Abgesehen davon: warum nicht gleich 0.
-
Bitte ? 5 Buchstaben sind 4 Elemente ?
-
Nö, 5 Buchstaben sind 5 Elemente. Aber Dein Array ... [4] hat nur 4 Elemente.
-
Ich dachte es wären [0, 1, 2, 3, 4] ? Das sind aber doch 5 Elemente, oder übersehe ich da jetzt etwas ganz übel ?
-
Nein du übersiehst nichts, dein Array hat 4 Elemente, du schreibst aber über deine Arraygrenzen hinweg, was da passiert ist undefiniert.
-
In eckigen Klammern gibst du die Größe an, das bedeutet, dein Array hat 4 Elemente. Du brauchst aber 6 Elemente, weil Hallo aus 5 Buchstaben besteht und du zusätzlich eine 0 am Ende brauchst als Terminator (Damit man weiß, wo der String zu Ende ist.)
Damit du nicht jedes mal die Länge kennen musst, würde ich sie einfach vom Compiler bestimmen lassen:
char hallo[] = "Hallo";