wie kann ich den Inhalt eines Pointers zu nem Array zuweisen



  • abdel schrieb:

    Hallo Leute! 😋
    meine Frage ist wie kann ich den Inhalt eines Zeigers in einem Array speicheren.
    vielen Dank im voraus 😉

    ...
    char* Pt1;
    char array [];
    ...
    
    Pt1 = strtok("string1_string2_string3_...","_");
    array = Pt1; //Fehler!!! wie löse ich es dann??? :open_mouth:  :rolling_eyes: 
    ...
    
    Würde das so nicht auch gehen?...
    char* Pt1;
    Pt1 = strtok("string1_string2_string3_...","_");
    int i,n=strlen(Pt1);
    char array[n];
    
    for(i=0;i<n+1;i++)
    {
    array[i]=Pt1[i];
    } 
    printf("%s",array);
    


  • Theoretisch schon aber ältere Compiler können damit nicht umgehen wegen dem char array[n]; da sowas erst ab C99 gütig ist.

    Außerdem kannst strcpy statt die ganze for-Schleife benutzen.

    Die beste Lösung wäre:

    char* Ptl, *string;
    
    Pt1 = strtok("string1_string2_string3_...","_");
    
    string = malloc(strlen(Ptl)+1);
    
    if(!string)
    {
        fprintf(stderr, "Kein Speicher mehr!\n");
        /* hier Fehlerbehandlung */
    }
    
    strcpy(string, Ptl);
    
    ....
    free(string);
    


  • supertux schrieb:

    Theoretisch schon aber ältere Compiler können damit nicht umgehen wegen dem char array[n]; da sowas erst ab C99 gütig ist.

    Außerdem kannst strcpy statt die ganze for-Schleife benutzen.

    Die beste Lösung wäre:

    char* Ptl, *string;
    
    Pt1 = strtok("string1_string2_string3_...","_");
    
    string = malloc(strlen(Ptl)+1);
    
    if(!string)
    {
        fprintf(stderr, "Kein Speicher mehr!\n");
        /* hier Fehlerbehandlung */
    }
    
    strcpy(string, Ptl);
    
    ....
    free(string);
    

    Das ist natürlich eine feine Sache den Speicher dynamisch für das Array zu belegen,aber 1.glaube ich nicht das heute noch einer c99 standart benutzt,und
    2.wär mir das für ein so kleines Programm zu aufwendig.Für größere Sachen ist
    deine Lösung die bessere Wahl....
    MfG
    Ciro



  • Ich verstehe nicht, was du meinst (das mit dem Standard).

    Sowas wie char array[n]; mit n als Variable ist erst nach C99 im Standard (wenn ich mich nicht irre), d.h. wenn du nicht nach C99 kompilierst, dann kann das unter Umständen gar nicht kompiliert werden.



  • supertux schrieb:

    Außerdem kannst strcpy statt die ganze for-Schleife benutzen.

    Die beste Lösung wäre:

    char* Ptl, *string;
    
    Pt1 = strtok("string1_string2_string3_...","_");
    
    string = malloc(strlen(Ptl)+1);
    
    if(!string)
    {
        fprintf(stderr, "Kein Speicher mehr!\n");
        /* hier Fehlerbehandlung */
    }
    
    strcpy(string, Ptl);
    
    ....
    free(string);
    

    Sollte man dann nicht gleich strdup() nehmen? 😉



  • ja, ich vergesse immer diese Funktion 🙂



  • supertux schrieb:

    Ich verstehe nicht, was du meinst (das mit dem Standard).

    Sowas wie char array[n]; mit n als Variable ist erst nach C99 im Standard (wenn ich mich nicht irre), d.h. wenn du nicht nach C99 kompilierst, dann kann das unter Umständen gar nicht kompiliert werden.

    Sorry!Ich hab mich falsch augedrück...Ich meinte das heute der größte Teil nach C99 Standard compiliert.Du etwa nicht?



  • Ich schon, aber voraussetzen kann man nicht. Es gibt noch Leute, die mit (ur)alten Compilern kompilieren.



  • supertux schrieb:

    ja, ich vergesse immer diese Funktion 🙂

    Du bist da in guter Gesellschaft, die Leute vom Normierungskommitee haben die Funktion auch vergessen.



  • Daniel E. schrieb:

    supertux schrieb:

    ja, ich vergesse immer diese Funktion 🙂

    Du bist da in guter Gesellschaft, die Leute vom Normierungskommitee haben die Funktion auch vergessen.

    Das ist allerdings wahr.


Anmelden zum Antworten