Problem mit char*-Array



  • Hallo!

    Ich habe folgendes einfaches Programm:
    Ich übergebe einen Pointer auf int, verändere diesen dann in der void int_test, und lasse mir das Ganze in der Main ausgeben, das funktioniert noch ohne Probleme. Aber wenn ich jetzt einen char* übergebe, dann kann ich den Inhalt zwar in der void pointer_test ausgeben, aber in der Main stürzt das Programm dadurch ab... Sitze schon länger am Problem und komm einfach nicht drauf 😞

    #include <stdio.h>
    #include <stdlib.h>

    void int_test(int test);
    void pointer_test(char
    char_a);

    int main()
    {
    int int_a=0;
    int_test(&int_a);
    printf("%d\n",int_a);

    char *char_a=NULL;

    pointer_test(&char_a);
    printf("Main: %c\n",(char_a));
    printf("%c\n",char_a[1]); //Problem ???

    return 0;
    }

    void int_test(int *test)
    {
    *test = 50;
    }

    void pointer_test(char* char_a)
    {
    *(char_a+0)='g';
    *(char_a+1)='o';

    printf("Funktion: %c",char_a[0]);
    printf("%c\n",char_a[1]);
    }



  • *(char_a+0)='g'; 
    *(char_a+1)='o';
    

    Was willst du damit bezwecken? char_a + 0 bringt nichts, in der zweiten Zeile wird jedoch das aktuelle Zeichen zu dem nächsten Zeichen. Und warum dereferenzierst du hier?



  • Kóyaánasqatsi schrieb:

    Was willst du damit bezwecken? char_a + 0 bringt nichts, in der zweiten Zeile wird jedoch das aktuelle Zeichen zu dem nächsten Zeichen. Und warum dereferenzierst du hier?

    Er möchte vermutlich die ersten beiden Zeichen eines Strings ändern? 🙂

    Zum Problem:
    Der String zeigt auf nichts (NULL). Du musst erst Speicher reservieren, bevor Du etwas reinschreiben kannst.



  • Genau, ich will die ersten beiden Zeichen von dem String ändern!
    Hab das Ganze modifiziert mit:
    char_a = malloc(sizeof(char)*2); //2 Zeichen

    Aber das Problem liegt noch immer bei der Ausgabe im Main:
    printf("Main: %c\n",(char_a)); --> Funktioniert
    printf("%c\n",char_a[1]); --> Sobald ich im Main auf das Array zugreifen will, stürtzt das Programm ab!



  • LordJaxom schrieb:

    Er möchte vermutlich die ersten beiden Zeichen eines Strings ändern? 🙂

    Ja, schon klar, habe in dem Kontext nur den Sinn wegen "char *char_a=NULL;" nicht verstanden.

    Wo rufst du "char_a = malloc(sizeof(char)*2);" denn auf? Was gibt er bei der ersten Ausgabe aus?



  • In dieser Zeile steckt der Fehler:

    pointer_test(&char_a);
    


  • Kóyaánasqatsi schrieb:

    LordJaxom schrieb:

    Er möchte vermutlich die ersten beiden Zeichen eines Strings ändern? 🙂

    Ja, schon klar, habe in dem Kontext nur den Sinn wegen "char *char_a=NULL;" nicht verstanden.

    Wo rufst du "char_a = malloc(sizeof(char)*2);" denn auf? Was gibt er bei der ersten Ausgabe aus?

    Das rufe ich in der Funktion auf, bin mir aber nicht sicher ob es wirklich da hingehört! Bei der Funktion selber gibt er mir "go" aus, allerdings in der Main zuerst gar nix und produziert dann anscheinend einen Seg-Fault..

    In dieser Zeile steckt der Fehler:
    pointer_test(&char_a);

    Wird das Array nicht by Reference (mit AddressOf) übergeben??


Anmelden zum Antworten