char Pointer als Rückgabewert



  • Ich blicke das echt nicht mehr:

    Also ich habe folgende fkt:
    Die fkt soll mit aus:
    /home/patrick/videos/film.mpg
    diesen String machen
    /home/patrick/videos/

    char* getPath(const char *mname) {
    char res[255]="";
    char test[255]="";
    char *name=NULL;
    name = strrchr(mname,'/');
    if(name==NULL) {
    printf("Can't find '/' in Path. %s",mname);
    sprintf(res,"./");
    }
    
    if(name!=NULL && strlen(name) > 0 && strlen(name) <= 254) {
    int len = strlen(mname) - strlen(name);
    strncpy(res,mname,len);
    res[len] ='/';
    res[len+1] ='\0';
    }else{
    res[0] ='-';
    res[1] ='\0';
    }
    printf("Path in der fkt= %s\n",res);
    return res;
    }
    

    Das ganze wird so aufgerufen:

    int main(int argc, char *argv[]) {
    
    char t[255] = "";
    char* test = getPath(argv[1]);
    strcpy(t,test);
    printf("nach strcpy (%s) (%s) (%s) \n",t,test,argv[1]);
    ........
    

    Die Ausgabe sieht dann so aus:

    Path in der fkt= /home/patrick/videos/
    nach strcpy (8Ž·àÙö·) (8Ž·àÙö·) (/home/patrick/videos/001s.mpg)

    Das Problem ist wohl das der rückgabewert auf dem Stack landet.
    bei char* muss ich den String dann wohl recht schnell in einen neuen copieren.
    deshalb strcpy(...).
    Leider kommt ausserhalb der fkt nur müll an.
    Es ging aber schon mal.
    Ich vermute mal das der Speicher überschrieben wird.

    Die Speicherverwaltung macht mir da alles wieder durcheinander.

    Kann mir das jemand erklären?



  • Wenn Du einen char* verwendest mußt Du auch irgendwo mit new speicher dafür reservieren. Und diesen muß man dann auch irgendwann mit delete[] wieder freigeben.

    [EDIT] Sorry, ist ja das ANSI C-Forum: natürlich nicht new und delete, sondern malloc und free...



  • Mach halt dein res buffer als Parameter (char*) der Funktion.


Anmelden zum Antworten