UNIXでディレクトリリストを印刷する次のコードがあります。
struct dirent *res;
struct DIR *dir;
scanf("%s",str);
dir=opendir(str);
if(dir==NULL)
{
perror("Invalid directory");
return 1;
}
res=(struct dirent *)readdir(dir);
while(res)
{
printf("%s\n",res->d_name);
res=(struct dirent *)readdir(dir);
}
上記のコードをコンパイルすると、次の警告が表示されます
ls.c:16:17: warning: passing argument 1 of ‘readdir’ from incompatible pointer type
[enabled by default]
/usr/include/dirent.h:164:23: note: expected ‘struct DIR *’ but argument is of type
‘struct DIR *’
ls.c:20:21: warning: passing argument 1 of ‘readdir’ from incompatible pointer type
[enabled by default]
/usr/include/dirent.h:164:23: note: expected ‘struct DIR *’ but argument is of type
‘struct DIR *’
foo
「予期される引数ですが、引数の型は次のとおりです」と言うとき、GCCは正確に何を意味しfoo
ますか?
私もstruct DIR dir
代わりに*dir
and&dir
の代わりに使用しようとしdir
ましたが、次のエラーが発生します
ls.c:7:12: error: storage size of ‘dir’ isn’t known
PS: コードの出力は問題ありません。