结束游戏是将目录中文件的扩展名与2个单独的数组字符串进行比较,然后将其排序并将其放入2个不同的文件夹中。
我在比较两个不同数组的字符串时遇到问题.. esp有两个不同大小的字符串数组..
任何建议都表示赞赏..
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
int main (void)
{
DIR *dirP;
struct dirent *dp;
char *fileN; int i = 0;
char *extMov[]= {".mp4",".flv"};
char *extMusic[]= {".mp3"};
dirP = opendir ("/Users/abc/Downloads");
if (dirP != NULL)
{
while ((dp = readdir(dirP)) != NULL)
{
if((fileN = strrchr(dp->d_name,'.')) != NULL)
{
for (i=0; extMov[i] != NULL; i++)
{
if(strcmp (fileN,extMov[i]) == 0)
{
printf("%s\n",dp->d_name);
}
}
}
}
closedir(dirP);
}
else
perror (" Could not open the directory\n");
return 0;
}
答案 0 :(得分:1)
您遇到的一个大问题是数组通常不会以任何方式终止。所以在你的循环中
for (i=0; extMov[i] != NULL; i++)
你最有可能走出界限,并继续迭代,直到内存中有一个NULL
,这可能远远超出界限。访问数组越界导致undefined behavior并使您的整个程序怀疑错误和非法,即使它可能编译正常且没有警告。
要解决此问题,您可以使用一个小技巧来计算数组中的数字条目:
for (i=0; i < sizeof(extMov) / sizeof(extMov[0]); i++)
请注意,此技巧仅适用于正确的数组。你必须记住数组经常衰减到指针,例如当一个数组作为参数传递给一个函数时,然后这个技巧将不起作用。
答案 1 :(得分:1)
您的for loop
正在寻找要停止的NULL值,但您没有为数组设置NULL值。
因此,extMov[i] != NULL
可能永远不会被找到(取决于你记忆的内容)
char *extMov[]= {".mp4",".flv", NULL};
我明确地添加一个NULL作为我的数组的最后一个条目,以确保拥有它。