Frage zu: vector<string> und strchr



  • Hallo liebe Community,

    mit meinem Programm lese ich den Inhalt eines Ordners aus und lege die einzelnen Objekte in einem vector<string> ab. Nun möchte ich aber wissen ob es sich um eine Datei oder einen Unterordner handelt. Deswegen bin ich auf die Idee gekommen, das ganze mit strchr oder strstr auszulesen.

    vector<string> StoredFiles;
    
    ...
    
    for(unsigned int x = 0; x < StoredFiles.size(); x++) 
    {
    // Das war meine Idee, klappt aber nicht ... :-(
        char * tmpchr = strstr(StoredFiles[x], '.');
        if(tmpchr == NULL)
        {
    	cout << "check" << endl;
        }
    }
    
    ...
    

    Da ich hier grad etwas hänge wäre ich für einen konstruktiven Lösungsvorschlag sehr dankbar. Außerdem würde mich noch interessieren, wieso obiges Beispiel nict klappt.

    Dankö im voraus,

    Grüßle Rille


  • Mod

    Ganz einfache, offensichtliche Lösung: Nicht strchr oder strstr oder sonst etwas aus der cstring benutzen. Wie kommst du überhaupt auf diesen Unsinn? Nimm doch die Funktionen der Stringklasse!

    Und warum das nicht klappt: Wie sollte es? Ein std::string ist kein Nullterminiertes char-Array was strstr erwartet. Mit string::c_str() kannst du so etwas erhalten. Aber so ein Vorgehen ist komplett sinnlos, weil std::string das alles schon kann. Was hier konkret passiert ist, dass du das strstr auf die internen Datenstrukturen des strings losgelassen hat, die strstr nun als nullterminiertes char-Array interpretiert. Allgemeine Heiterkeit folgt. Die eigentlichen Nutzdaten des Strings hätten aber ganz woanders gelegen.



  • Und jede Datei hat immer eine Dateiendung?
    Unter Windows ist es außerdem so dass der durchsuchte Ordner selbst bei der Auflistung als "." zurückgegeben wird.



  • Abgesehen davon, dass du hier std::string mit C-Funktionen mischst und es bessere Möglichkeiten gäbe: "geht nicht" ist keine Fehlerbeschreibung! Was geht nicht? Fehler zur Compile- oder zur Laufzeit? Eventuelle Fehlermeldung? Wie äußert sich das Fehlverhalten?



  • okay,

    in reinem C++ zu programmieren bereitet mir in der Tat noch Probleme und ich geb zu, das ich hier und da noch C und C++ ausversehen zusammenwerf. Tschuldigung 😞 .

    SeppJ schrieb:

    Wie kommst du überhaupt auf diesen Unsinn? Nimm doch die Funktionen der Stringklasse!

    Schande über mein Haupt. Ich muss mir angewöhnen richtig zu suchen.

    rean schrieb:

    Und jede Datei hat immer eine Dateiendung?
    Unter Windows ist es außerdem so dass der durchsuchte Ordner selbst bei der Auflistung als "." zurückgegeben wird.

    Das is mir klar, "." und ".." wird auch im Vorfeld schon rausgefiltert. Jede Datei im Ordner hat die Struktur "Dateiname.txt".

    Also mit neu erworbenen Wissen hab ich mich gleich auf die Suche begeben und String::find gefunden. Klappt soweit super damit.

    Danke euch


Anmelden zum Antworten