C言語のようなlsをコードする必要がありますが、いくつか問題があります。 opendirを使ってディレクトリを開いた後、printfやputsを使ってパス名を表示しないと、closedirで実行するとcore dumpedエラーが出ますが、パスを印刷するとコードはうまく動作します。opendirの後にパス名が表示されない場合、closedirを使用するとコアがダンプされる
const char * cwd=".";
DIR * dir=opendir(cwd);
//that print --> printf("%s",cwd);
if(dir==NULL){
puts("ohlala");
}
char * filename;
struct dirent * truc;
struct stat * filestat=malloc(sizeof(struct stat *));
while((truc=readdir(dir))!=NULL){
filename=truc->d_name;
if(strcmp(filename,"..")!=0 && strcmp(filename,".")!=0){
if(l==0){
printf("%-s ",filename);
}else if(l==1){
if(stat(filename,filestat)!=0){
printf("Erreur stat de %s\n",filename);
exit(1);
}
printf("%ld %-s ",filestat->st_ino,filename);
}
}
}
//gdb is telling me the probleme is here
closedir(dir);
return 0;
ありがとう。あなたは正しくfilestat
を割り当てていない
をそのような奇妙な何かがどこか* *未定義の動作のTELLすることができます。 –
脇に:変数 'l'(ell)は何ですか?とにかく 'int hell = l;'と言うと、それが '1'(1)でないことを慎重に見なければならないので、これは名前の非常に貧しい選択です。 –
"。"を見ているので問題ではありませんが、 'dir'が' NULL'ならば、何かを出力してはいけません - 関数からも戻ります。 –