【发布时间】:2015-05-30 09:31:26
【问题描述】:
这是一段看起来很奇特的 C 代码。出于某种奇怪的原因,DT_DIR 应该忽略文件夹,但它不会:
char** getFiles(char* pathToScan, int size)
{
DIR *d;
struct dirent *dir;
char** filesName;
int i=0;
filesName = malloc(sizeof(char*)*size);
d = opendir(pathToScan);
if (d)
{
while ((dir = readdir(d)) != NULL)
{
if (dir->d_type != DT_DIR)
{
*(filesName + i-2) = malloc(sizeof(char)*strlen(pathToScan) + sizeof(char)*strlen(dir->d_name));
strcpy(*(filesName + i-2), pathToScan);
strcat(*(filesName + i-2), "\\");
strcat(*(filesName + i-2), dir->d_name);
}
i++;
}
closedir(d);
}
return filesName;
}
- 如果我将扫描文件夹添加到文件中,程序会崩溃。
- 如果我扫描的文件夹中没有文件夹,它可以正常工作。
我的第一个想法是 DT_DIR 有问题 (read about DT_DIR),但我不知道该怎么办。
发生了什么事?为什么 DT_DIR 不忽略文件夹?
【问题讨论】:
-
你没有分配足够的内存。
-
i++应该在 if 中并删除-2 -
你的访问太糟糕了,这甚至都不好笑。
-
@Ôrel,谢谢,这是为了解决文件夹问题?
-
您在第一次通过循环时索引到
filesName[-2],您将strcpy() + strcat()ing 到一个太小的两个字节的缓冲区中(一个用于"\\",一个用于@ 987654328@)。甚至推测表现出未定义行为的程序也是没有用的。