当我像./a.out一样运行我的应用程序时出现此错误: 我编译我的应用程序,如:gcc test1.c。 内存故障
我的代码是
int main (void)
{
DIR *dp;
struct dirent *ep;
const char *path_dir ="/home/risorse/ae23054/Giuseppe";//Inserire la directory qui
dp = opendir (path_dir);
if (dp != NULL)
{
while (ep = readdir (dp)){
printf(ep->d_name);
char nome_file[256];
strcpy(nome_file,ep->d_name);
FILE *fd=fopen(nome_file, "a+");
fprintf(fd,"\nEXIT");
fclose(fd);
}
(void) closedir (dp);
}
else
perror ("Non posso aprire la directory");
return -1;
}
感谢
答案 0 :(得分:3)
你使用fopen结果而不检查它是否为NULL。
答案 1 :(得分:2)
如果您当前的目录不是path_dir
并且您当前的工作目录不包含与path_dir
中的文件具有相同名称的文件,则fopen
将返回NULL。
您的程序很可能会崩溃,因为您在尝试使用它之前未检查返回值(在以下fprintf
和fclose
来电中。
可能的解决方案是在尝试fopen
文件之前更改到目录。这意味着您将获得预期的行为。虽然,如果在获取目录条目后立即删除/移动文件,仍需要检查NULL。
...
dp = opendir (path_dir);
if (dp != NULL)
{
fchdir(dirfd(dp));
...