[英]Queue doesn't return correct values
因此,基本上我正在分配作业,但这不是实际的问题。 作业要求我使用一个列表,到目前为止,还不错。
因此,想法如下:我有一个函数可以递归地打印目录的内容,可以正常工作,但是现在我试图将每个条目保存在队列中,稍后将用于处理某些事情。其他。 令人讨厌的部分是,我将每个条目(来自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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.