C kopieren char * zu char[]

Hallo, ich bin versucht zu kopieren char * Zeiger auf ein char [] - array.

dies ist mein code bisher

char * string_add(char * base, char * toAdd)
{
    char * string=malloc(strlen(base)+streln(toAdd)+1);
    sprintf(string,"%s%s",base,toAdd);
    char returnString[strlen(string)+1]; 
    //here comes my problem:
    memcpy(returnString,string,strlen(string)+1);
    //want to add free(string) here
    return returnString;
}

Möchte ich so eine Funktion zum speichern von code. Ich möchte nicht, sich nach jedem allozierten Speicher. Ich habe auch versucht

memcpy(&returnString,string,strlen(string)+1);

sowie einige Varianten mit strcpy und strncpy. Aber Folgendes problem besteht:

wenn rufe ich die Funktion zweimal wie:

int main(int argc, char * argv[])
{
    char * str1=string_add(argv[1],"-test1"); 
    char * str2=string_add(argv[1],"-test2"); 
    printf("%s, %s", str1,str2);
}

die Ausgabe wie:

abc-test2, abc-test2

Wie kann ich dies erkennen?

Vielen Dank im Voraus!

  • Die Sie zurückgeben der Adresse von einem automatischen Variablen returnString. Müssen Sie sich nicht mehr als die string Puffer. Setzen Sie einfach string[strlen(base) + strlen(toAdd)] = 0 (oder verwenden Sie den Rückgabewert von sprintf zu wissen, wie lange string ist, oder speichern Sie strlen(base) + strlen(toAdd) bevor Sie malloc) und return string.
  • aber wenn ich return string ich frei später das Ergebnis. Dies ist, was ich vermeiden möchte.
  • man kann nicht wirklich vermeiden. wenn du die Möglichkeit hast von C++, dann können Sie mit smart Pointern, aber in C ist, müssen Sie entweder preallocate, oder verwalten Sie Ihre malloced Speicher
  • auch wenn Sie nicht return string haben Sie immer noch, Sie zu befreien. So wie es jetzt ist, Ihren code ein Speicherleck hat.
InformationsquelleAutor SevenOfNine | 2013-08-18
Schreibe einen Kommentar