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 hat 😕

    array[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*


Anmelden zum Antworten