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

現在の式はとして解析され、 0または1dirpent = (readdir(dirp) != NULL)に設定されます。dirpent

于 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)のマニュアルページやAdvancedLinuxProgrammingの本などのドキュメントを注意深く読むことを忘れないでください。

于 2012-10-20T14:16:44.003 に答える