我目前正在参加系统编程课程,教授为我们提供了ls命令实现的示例代码
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
int main (int argc, char *argv[]) {
DIR *dp;
struct dirent *dirp;
if(argc ==1) dp = opendir ("./");
else dp = opendir(argv[1]);
while ((dirp = readdir(dp)) != NULL) printf("%s\n", dirp->d_name);
closedir(dp);
exit(0);
}
但是,当我尝试运行它时,它会输出消息&#34; segmentation fault&#34;。这是我所做的图像test 导致此消息的原因是什么?
答案 0 :(得分:1)
您使用./a.out Assignment1.c
调用您的程序。
然后你的程序确实是opendir("Assignment1.c");
。由于"Assignment1.c"
是文件而非目录,opendir
会返回NULL
。
你天真地dirp = readdir(dp)
dp
为NULL
,导致分段错误。
您应该测试opendir
的返回值,如果是NULL
则显示错误消息。