PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : scandir ausgabe



Tuxist
25-03-2007, 21:02
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.

anda_skoa
26-03-2007, 11:28
Ein char array ist ein char* und kann daher als const char* benutzt werden.
siehe auch strncpy

Ciao,
_

Tuxist
26-03-2007, 17:39
Habe ich versucht bekomme leider fehler beim ausführen des programmes:

libcss.cpp


#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


#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:


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 ()

anda_skoa
27-03-2007, 16:21
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



string folder = namelist[n]->d_name;

Dann "folder" zum Beispiel an einen std::vector oder eine std::list anhängen.

Ciao,
_

Tuxist
27-03-2007, 20:00
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



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:


string folders = namelist[n]->d_name;
return folders;


output:



H��5▒

anda_skoa
28-03-2007, 17:21
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,
_

Tuxist
28-03-2007, 18:53
weil ich es libcssouput ausgeben möchte.

anda_skoa
28-03-2007, 21:17
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,
_