Итак, в основном у меня есть задание, но проблема не в этом. Назначение требует от меня использовать список, что пока хорошо.
Итак, идея заключается в следующем: у меня есть функция, которая рекурсивно печатает содержимое каталога, которая работает нормально, но теперь я пытаюсь сохранить каждую запись в очереди, которую я позже собираюсь использовать для чего-то еще. Неприятная часть заключается в том, что я помещаю каждую запись (d_name
из структуры dirent
) в очередь в этой функции, и если я печатаю содержимое очереди непосредственно в конце функции, она возвращается нормально, но если я напечатаю результаты в main
, я получу также мусор.
Итак, мои тестовые каталоги выглядят так:
-DummyDir
-DummyDir2
-DummyDir6
-DummyDir7
-DummyDir3
-DummyDir8
-DummyDir4
-DummyDir9
-DummyDir10
-DummyDir5
-DummyDir11
-DummyDir12
Моя функция выглядит так:
void dirwrap(char* dir, std::queue<char*>* queue)
{
DIR* dirOpen;
if(!(dirOpen = opendir(dir))){
printf("Couldn't open directory: %s\n", dir);
exit(-1);
}
struct dirent* dd;
char path[2000];
while ((dd = readdir(dirOpen)) != NULL)
{
if (strcmp(dd->d_name, ".") != 0 && strcmp(dd->d_name, "..") != 0) {
//printf("%s\n", dd->d_name);
queue->push(dd->d_name);
sprintf(path, dir, "%s", sizeof(dir));
strcat(path, "/");
strcat(path, dd->d_name);
dirwrap(path, queue);
}
}
closedir(dirOpen);
}
И если я напечатаю содержимое queue
сразу после closedir
, я получу хороший результат, например:
DummyDir2
DummyDir6
DummyDir7
DummyDir5
DummyDir12
DummyDir11
DummyDir3
DummyDir8
DummyDir4
DummyDir9
DummyDir10
Но если я напечатаю содержимое своей очереди в main
, я получу это:
DummyDir2
DummyDir9
DummyDir10
DummyDir5
8�)�W▒
.
DummyDir3
~n��w▒
DummyDir4
DummyDir9
DummyDir10
Я действительно не могу понять, почему на самом деле это делает, поэтому я был бы очень признателен, если бы вы мне помогли.