Anzeige:
Ergebnis 1 bis 8 von 8

Thema: scandir ausgabe

  1. #1
    Registrierter Benutzer
    Registriert seit
    06.06.2004
    Beiträge
    76

    scandir ausgabe

    Ist es möglich den scandir array d_name in einen const char umzuwandeln um diesen dann weiter zu verarbeiten ? habe bei google nichts dazu gefunden.
    Hoddel aus Überzeugung

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ein char array ist ein char* und kann daher als const char* benutzt werden.
    siehe auch strncpy

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    06.06.2004
    Beiträge
    76
    Habe ich versucht bekomme leider fehler beim ausführen des programmes:

    libcss.cpp
    Code:
    #include <iostream> 
    #include <fstream>
    #include <string>
    #include "include/css.h"
    #include <tuxcms/libhtml++.h>
    #include <dirent.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    
    
    using namespace std;
    
    
    string libcss::libcssread()
    {
    	folder = "/home/jan/style";
               n = scandir(folder, &namelist, 0, alphasort);
               if (n < 0)
                   perror("scandir");
               else {
    			while(n--) { 
    			strncpy (namelist[n]->d_name, folders, sizeof(namelist[n]->d_name));
    			free(namelist[n]);
    		}
                   free(namelist);
    		}
    cout << folders << endl;
    }
    
    void libcss::libcssouput()
    {
    	htmlformselect::htmlformselect("Formselect1", "a" , "GET");
    	htmlformsubmit::htmlformsubmit("Switch Design");
    }
    css.h
    Code:
    #include <fstream>
    #include <string>
    #include <iostream> 
    
    class libcss
    {
    private:
    std::string libcssread();
    const char* folder;
    const char* foldertmp;
    const char* folders;
    struct dirent **namelist, *folderlist;
    int n;
    public:
    
    void libcssouput();
    libcss()
    {
    libcssouput();
    libcssread();
    };
    };
    gdb output:
    Code:
    0x00002b2a4b4a6cab in raise () from /lib/libc.so.6
    (gdb) bt
    #0  0x00002b2a4b4a6cab in raise () from /lib/libc.so.6
    #1  0x00002b2a4b4a8660 in abort () from /lib/libc.so.6
    #2  0x00002b2a4b4de67b in ?? () from /lib/libc.so.6
    #3  0x00002b2a4b4e5b33 in ?? () from /lib/libc.so.6
    #4  0x00002b2a4b4e927c in free () from /lib/libc.so.6
    #5  0x00002b2a4aac44a4 in libcss::libcssread () from /usr/lib/tuxcms/libcss.so
    #6  0x0000000000400e3c in libcss::libcss ()
    #7  0x0000000000400d41 in main ()
    Hoddel aus Überzeugung

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    sizeof eines Pointers ist 4 auf 32Bit Plattformen.
    Wenn du die Länge eines Strings haben willst, mußt du strlen benutzen.

    Außerdem hast du eine falsche Richtung, der erste Parameter von strncpy ist das Ziel, der zweite die Quelle.

    Nachdem du aber ohnehin C++ benutzt kannst du es auch so machen

    Code:
    string folder = namelist[n]->d_name;
    Dann "folder" zum Beispiel an einen std::vector oder eine std::list anhängen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer
    Registriert seit
    06.06.2004
    Beiträge
    76
    Zitat Zitat von anda_skoa Beitrag anzeigen
    sizeof eines Pointers ist 4 auf 32Bit Plattformen.
    Wenn du die Länge eines Strings haben willst, mußt du strlen benutzen.

    Außerdem hast du eine falsche Richtung, der erste Parameter von strncpy ist das Ziel, der zweite die Quelle.

    Nachdem du aber ohnehin C++ benutzt kannst du es auch so machen

    Code:
    string folder = namelist[n]->d_name;
    Dann "folder" zum Beispiel an einen std::vector oder eine std::list anhängen.

    Ciao,
    _
    hatte ich auch schon versucht mit:
    Code:
    			string folders = namelist[n]->d_name;
    			return folders;
    output:
    Code:
    H��5▒
    Hoddel aus Überzeugung

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Hmm.
    Nur zur Sicherheit (weil das im geposteten Code wieder falsch ist): hast du ein return am Ende der Funktion libcss::libcssread()? (Erwartet eine Rückgabe)

    Hast du -Wall in deinen Compilerflags?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer
    Registriert seit
    06.06.2004
    Beiträge
    76
    weil ich es libcssouput ausgeben möchte.
    Hoddel aus Überzeugung

  8. #8
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ich meinte: hast du ein return mit einem string am Ende?

    Wenn ich mich richtig erinnere war das nämlich die Ursache in einem deiner früheren Anfragen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •