aus drei strings einen machen



  • Hallo!

    Ich habe drei strings, im ersten das Verzeichnis im zweiten / und im dritten den dateinamen. ich muss jetzt diese drei dinger kombinieren, damit ich die datei öffnen kann. die strings dürfen aber nicht verändert werden. ich würde das mit strcpy und/oder strcat und nem vierten string machen, aber das muss doch auch einfacher und eleganter gehen oder?



  • sprintf() oder snprintf() (ab C99) ....



  • ich habs jetzt mal mit sprintf() und snprintf() probiert, aber beide male gehts nicht. Ich hab hier mal den entsprechenden Programmteil. bei stat() hängts immer:

    while((dirzeiger=readdir(dir))!=NULL)
    {
    if(((*dirzeiger).d_name)[0]!='.')
    {
    if(stat((char *)sprintf("%s/%s",b,(*dirzeiger).d_name), &attribut)==-1)
    {
    printf("Fehler bei stat\n");
    getcwd(puffer,sizeof(puffer));
    printf("Working Directory: %s\n",puffer);
    printf("Datei: %s\n",sprintf("%s/%s",b,(*dirzeiger).d_name));
    exit(1);
    }
    if(attribut.st_mode&S_IFREG)
    {
    printf("%s<BR>\n",(*dirzeiger).d_name);
    }
    else if(attribut.st_mode&S_IFDIR)printf("Verzeichnis %s\n",(*dirzeiger).d_name);
    else printf("Unbekannte Datei %s\n",(*dirzeiger).d_name);
    }
    }

    im string b ist das verzeichnis gespeichert.

    wo ist da der fehler?



  • Hi,

    if(stat((char *)sprintf("%s/%s",b,(*dirzeiger).d_name), &attribut)==-1)

    Das geht nicht. sprintf liefert kein char * zurueck, sondern ein int.
    Ausserdem sieht deine sprintf-Anweisung sehr merkwuerdig aus.

    Schau mal in deine Manpages: man sprintf

    Definition: int sprintf(char *str, const char *format, ...);

    Du uebergibst als erstes einen Puffer, in den geschrieben werden soll. Dann
    kannst du deine Formate angeben und die Variablen.

    Bei dir fehlt die Angabe eines Puffers.

    char Buffer[100];
    
         sprintf ( Buffer, "%s%s", b, dirzeiger -> d_name );
    
             if ( stat ( Buffer, &attribute ) == -1 )
                 //tue was
    

    mfg
    v R



  • Danke, das wars. 😉


Anmelden zum Antworten