Hello World (Array) in C, Speicherzugriffsfehler



  • Hey, folgendes Programm in C gibt "Hello World" aus. Jedoch bin ich mir nicht sicher ob die Pointer so richtig sind.

    Wenn ich bei char *b etwas ungleich 14 nehme, gibt er mir zusätzlich ein Speicherzugriffsfehler aus, auf was basiert das? Hat da jemand eine Ahnung?

    Kompiliert und ausgeführt habe ich das in einer virtuellen Maschine (Debian).

    #include <stdio.h>
    #include <string.h>

    int main (){

    char *a[] = {"Hello World\0"};
    char *b[14];

    strncpy(*b, *a, strlen(*a));

    printf("%s\n", *b);

    return 0;
    }



  • Du hast da Arrays von char-Pointern.
    Das ist etwas anderes als char-Arrays.
    Ich weiß nicht, was du haben möchtest.

    Der direkte Weg sieht so aus:

    #include <stdio.h>
    #include <string.h>
    
    int main (){
    
      char a[] = "Hello World";  // die '\0' macht der Compiler automatisch.
      char b[14];  // Muss mindestens 12 Elementen Platz bieten, damit "Hello World" aufgenommen werden kann
    
    //strncpy(b, a, strlen(a)); // strncpy ist doof, da so die abschließende '\0' nicht mit kopiert wird
      strcpy(b, a);             // strcpy kopiert ganz a
    
      printf("%s\n", b);
    
      return 0;
    }
    

    Wie schon gesagt arbeitet deine Version mit Arrays von char-Pointern.
    Dein erster Zeiger aus b zeigt auch irgendwo hin. Da solltest du auf keinen Fall Daten hin schreiben.



  • Ein weiterer Punkt ist:
    Die String-Konstante "Hello World\0" die du verwendest ist ein wenig irreführend:
    Sie enthält im Endeffekt 2x '\0', einmal fügst du sie manuell am Ende ein außerdem wird implizit ein weiteres '\0' hinten angefügt.


Log in to reply