[英]Listing files in Directory in Ubuntu
我正在嘗試列出當前目錄的父目錄中的文件,但是當我嘗試從終端執行該程序時,出現“分段錯誤”。我在做什么錯? 這是代碼:
#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;
}
dirpent=readdir(dirp) !=NULL
應該
(dirpent = readdir(dirp)) != NULL
您當前的表達式被解析為dirpent = (readdir(dirp) != NULL)
,它將dirpent
設置為0或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書之類的文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.