我正在尝试列出当前目录的父目录中的文件,但是当我尝试从终端执行此程序时,我得到了分段错误。我做错了什么?这是代码:
#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;
}
答案 0 :(得分:3)
dirpent=readdir(dirp) !=NULL
应该是
(dirpent = readdir(dirp)) != NULL
您当前的表达式被解析为dirpent = (readdir(dirp) != NULL)
,将dirpent
设置为0或1。
答案 1 :(得分: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手册等文档。