Ein String-Array verhält sich komisch
-
hi Leute,
in einem größerem Porgramm ist mir folgendes aufgefallen:
Ein solches Programm ...
#include <stdio.h> int main(int argc, char *argv[]) { char *blocks[2] = {"Char0","Char1","Char2"}; printf ("%s\n%s\n%s", blocks[0], blocks[1], blocks[2]); return 0; }
hat folgende Ausgabe:
Char0 Char1
und das gleich Porgramm mit
char *blocks[3] = {"Char0","Char1","Char2"};
hat die Ausgabe:
Char0 Char1 Char2
Warum? Muss das müssen blocks[0], blocks[1] und blocks[2] nicht reichen.
eLk
-
hirni
declaration: x[n];
verwendung: x[i] für 0 <= i < n
-
Echt?
int main(int argc, char *argv[]) { char *blocks[2] = {"Char0","Char1","Char2"}; printf ("%s\n%s\n%s", blocks[0], blocks[1], blocks[2]); return 0; }
Das Programm wird kompiliert und stürzt nicht ab?
Eigentlich müsste beim Kompilieren ein Fehler wie "zu viele initialisierer" kommen... oder ist das nur bei C++ der Fall? würde mich eigentlich wundern.
-
Jo mei... ein Compiler muss nunmal keine Warnungen geben...
-
Original erstellt von cd9000:
**Echt?int main(int argc, char *argv[]) { char *blocks[2] = {"Char0","Char1","Char2"}; printf ("%s\n%s\n%s", blocks[0], blocks[1], blocks[2]); return 0; }
Das Programm wird kompiliert und stürzt nicht ab?
Eigentlich müsste beim Kompilieren ein Fehler wie "zu viele initialisierer" kommen... oder ist das nur bei C++ der Fall? würde mich eigentlich wundern.**Neee, mein Programm strütz nicht ab. (Ich verwende KDevelop)
Aber jetzt weiß ich immer noch nicht warum es
blocks[3]
und nicht
block[2]
heißen muss.
-
blocks[3] muß es logischerweise heißen, weil das Array 3 Elemente hat
-
Also jetzt kapier ich gar nix mehr:
Das Programm
#include <stdio.h> int main(int argc, char *argv[]) { char *blocks[2] = {"Test.", "Noch ein Test.", "Und noch ein Test."}; printf ("Blocks 0: %s\n", blocks[0]); printf ("Blocks 1: %s\n", blocks[1]); printf ("Blocks 2: %s\n", blocks[2]); printf ("Blocks 3: %s\n", blocks[3]); return 0; }
hat die Ausgabe:
Blocks 0: Test. Blocks 1: Noch ein Test. Blocks 2: Ž&ÿQPèäðÿÿÄëÏŠúÿÿì
-
Original erstellt von Bashar:
blocks[3] muß es logischerweise heißen, weil das Array 3 Elemente hatarray[2] heißt doch es hat 3 Elemente:
array[0]
array[1]
array[2]oder?
-
Nö. Wer sagt das? array[n] hat n Elemente, nämlich von 0 bis n-1
-
Original erstellt von Bashar:
Nö. Wer sagt das? array[n] hat n Elemente, nämlich von 0 bis n-1*sichselbereingeb*