我在代码中遇到分段错误的原因是什么。
我认为这是因为cur = readdir(dr)中的while循环;当我试图错误输入时,它不会进入while循环。
int main(char *source)
{
DIR *dr;
struct dirent *cur;
struct stat fi;
long int total_size = 0;
dr = opendir(source);
char *name=source;
size_t sourcelen = strlen(source);
printf("\n\n Source is %s\n\n\n", source);
printf("before *path \n");
char *path = malloc(100);
strcpy(path,source);
printf("before while \n");
while ((cur = readdir(dr)) != NULL)
{
if(cur->d_name[0] != '.')
{
free(path);
path = malloc(sourcelen + strlen(cur->d_name) + 2);
strcat(path,source);
strcat(path,"/");
strcat(path,cur->d_name);
if(stat(path, &fi) == -1)
{
printf("error \n\n");
}
else
{
printf("%s ",cur->d_name);
printf("%ld ",fi.st_blocks);
total_size = total_size + fi.st_blocks;
}
}
}
printf("\n\ntotal_size = %ld \n", total_size);
printf("\n\n\n");
}
答案 0 :(得分:2)
你有:
int main(char *source)
这是main()
的完全非正统且可能不受支持的定义。有关允许和不允许的完整故事,请参阅What should main()
return in C and C++。
几乎可以肯定是你的分段错误的原因。你有:
DIR *dr;
…
dr = opendir(source);
你实际上有一个(小但非零)int
被视为({?1}}的一部分?char *
,这将导致麻烦。
你需要:
int main(int argc, char **argv)
{
if (argc != 2)
…report error and do not continue…
DIR *dr = diropen(argv[1]);
…error check dr and continue if not null…