0

我正在尝试列出当前目录的父目录中的文件,但是当我尝试从终端执行该程序时,出现分段错误。我做错了什么?这是代码:

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>

int main(int argc, char *argv[])
{
   struct dirent *dirpent;
   DIR *dirp;

   if(argc!=2)
   {
       printf("Cant continue with the program\n");
       return 0;
   }

   dirp= opendir(argv[1]);

   if(dirp)
   {
       while(dirpent=readdir(dirp) !=NULL)
           printf("%s\n",dirpent->d_name);

       closedir(dirp);
   }
   return 0;
}
4

2 回答 2

3
dirpent=readdir(dirp) !=NULL

应该

(dirpent = readdir(dirp)) != NULL

您当前的表达式被解析为dirpent = (readdir(dirp) != NULL),它将设置dirpent为 0 或 1。

于 2012-10-20T14:15:31.047 回答
1

如果你缩进你的程序,indent rd.c然后编译你的程序,gcc -Wall -g rd.c -o rd你会得到

 rd.c: In function 'main':
 rd.c:21:22: warning: assignment makes pointer from integer without a cast [enabled by default]
 rd.c:21:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]

所以你忘记了括号,你while应该是

 while((dirpent=readdir(dirp)) !=NULL)

请在提问之前编译带有所有警告的程序(并改进它直到它们都消失)。使用gdb调试器(及其bt命令)找出程序崩溃的原因SIGSEGV

不要忘记仔细阅读readdir(3)手册页和Advanced Linux Programming book 等文档。

于 2012-10-20T14:16:44.003 回答