0

UNIXプラットフォームでCで書かれたコードに以下の行があります。closeir() 関数でコア ダンプが発生する理由を教えてください。パスで指定されたディレクトリを正常に開くことができました。

    if (opendir(MyDir) != NULL )
    {
    closedir((DIR *) MyDir);
        exit 0;
    }
4

3 に答える 3

3

closedir() DIR *ではなくを取りますchar *closedir()それがうまくいかないことを願っています。試す:

#include <sys/types.h>
#include <dirent.h>

DIR *dir;
if ((dir = opendir(MyDir)) != NULL)
    closedir(dir);

(DIR *) MyDirまた、コンパイラの警告を抑制するためにキャストを追加したようです。コンパイラが警告を出した場合、その理由を突き止める必要があります。警告を抑制することは、正しいことではありません。

于 2010-01-19T11:40:14.230 に答える
2

MyDirconst char*の引数になるには、 でなければなりませんopendir

to に渡すにはfromの結果が必要です。ただパスをキャストすることはできません!opendirclosedir

const char* MyDir = "/";
DIR* directory = opendir(MyDir);
if (directory != NULL)
{
    closedir(directory);
    exit(0);
}
于 2010-01-19T11:41:09.500 に答える
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);
}

参照: http://sunsson.iptime.org/susv3/functions/readdir.html

于 2010-01-19T11:42:50.967 に答える