gpt4 book ai didi

c++ - 队列不返回正确的值

转载 作者:行者123 更新时间:2023-11-28 01:22:56 28 4
gpt4 key购买 nike

所以,基本上我有一项任务,但这不是真正的问题。作业要求我使用一个列表,到目前为止还不错。

所以我的想法是这样的:我有一个递归打印目录内容的函数,它工作正常,但现在我试图将每个条目保存在一个队列中,我稍后会用于别的东西。令人讨厌的部分是我将每个条目(dirent 结构中的 d_name)插入该函数中的队列,如果我直接在函数结束时,它返回正常,但如果我在 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);
}

如果我在 closedir 之后立即打印 queue 的内容,我会得到一个很好的结果,如下所示:

DummyDir2
DummyDir6
DummyDir7
DummyDir5
DummyDir12
DummyDir11
DummyDir3
DummyDir8
DummyDir4
DummyDir9
DummyDir10

但是如果我在 main 中打印队列的内容,我会得到:

DummyDir2
DummyDir9
DummyDir10
DummyDir5
8�)�W▒
.
DummyDir3
~n��w▒
DummyDir4
DummyDir9
DummyDir10

我似乎真的不明白为什么要这样做,所以如果你能帮助我,我将不胜感激。

最佳答案

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

dd->d_name是返回值中的一个数组,通常是:

     struct dirent {
ino_t d_ino; /* Inode number */
off_t d_off; /* Not an offset; see below */
unsigned short d_reclen; /* Length of this record */
unsigned char d_type; /* Type of file; not supported
by all filesystem types */
char d_name[256]; /* Null-terminated filename */
};

您需要复制它(例如 strdup 或使用 std::string 等),因为 readdir() 返回的数据可能会被随后调用 readdir() 覆盖对于相同的目录流,它将被closedir

释放

你在C++中替换std::queue<char*>* queue通过 std::queue<std::string>* queue (或 std::queue<std::string> & queue )或替换 queue->push(dd->d_name);通过 queue->push(strdup(dd->d_name));

关于c++ - 队列不返回正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55270297/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com