我在 unix 平台上用 C 编写的代码中有以下几行。请让我知道为什么我将核心转储到 closedir() 函数中。我可以成功打开路径指定的目录。
if (opendir(MyDir) != NULL )
{
closedir((DIR *) MyDir);
exit 0;
}
closedir()
需要 aDIR *
,而不是char *
. 希望closedir()
这样做是行不通的。尝试:
#include <sys/types.h>
#include <dirent.h>
DIR *dir;
if ((dir = opendir(MyDir)) != NULL)
closedir(dir);
此外,您似乎添加了一个强制(DIR *) MyDir
转换来抑制编译器警告。当编译器给你一个警告时,你应该找出它为什么这样做。压制警告几乎不是正确的做法。
MyDir
必须是 aconst char*
才能成为 的论据opendir
。
您需要将结果传递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);
}