UNIXプラットフォームでCで書かれたコードに以下の行があります。closeir() 関数でコア ダンプが発生する理由を教えてください。パスで指定されたディレクトリを正常に開くことができました。
if (opendir(MyDir) != NULL )
{
closedir((DIR *) MyDir);
exit 0;
}
closedir()
DIR *
ではなくを取りますchar *
。closedir()
それがうまくいかないことを願っています。試す:
#include <sys/types.h>
#include <dirent.h>
DIR *dir;
if ((dir = opendir(MyDir)) != NULL)
closedir(dir);
(DIR *) MyDir
また、コンパイラの警告を抑制するためにキャストを追加したようです。コンパイラが警告を出した場合、その理由を突き止める必要があります。警告を抑制することは、正しいことではありません。
MyDir
const char*
の引数になるには、 でなければなりませんopendir
。
to に渡すにはfromの結果が必要です。ただパスをキャストすることはできません!opendir
closedir
const char* MyDir = "/";
DIR* directory = opendir(MyDir);
if (directory != NULL)
{
closedir(directory);
exit(0);
}
型キャストが正しくありません。参考のため:
opendir
パラメータとしてディレクトリ名 (char*) が必要で、ディレクトリ ストリーム (DIR*) を返します。
DIR* opendir(const char* name)
closedir
パラメータとしてディレクトリ ストリーム (DIR*) が必要で、int (成功の場合は 0) を返します。
int closedir(DIR* stream)
したがって、コードは次のようになります。
const char* dirname;
DIR* mydir;
mydir = opendir(dirname);
if(mydir != NULL) {
closedir(mydir);
exit(0);
}