我在unix平台上用C编写的代码中有以下行。请让我知道为什么我在closedir()函数中获取核心转储。我可以成功打开path指定的目录。
if (opendir(MyDir) != NULL )
{
closedir((DIR *) MyDir);
exit 0;
}
答案 0 :(得分:3)
closedir()
takes a DIR *
,而不是char *
。希望closedir()
这样做不会起作用。尝试:
#include <sys/types.h>
#include <dirent.h>
DIR *dir;
if ((dir = opendir(MyDir)) != NULL)
closedir(dir);
此外,您似乎在(DIR *) MyDir
中添加了强制转换来抑制编译器警告。当编译器给你一个警告时,你应该找出它为什么这样做。抑制警告是不正确的事情。
答案 1 :(得分:2)
MyDir
必须是const char*
才能成为opendir
的参数。
您需要opendir
的结果传递给closedir
- 您不能只是投射路径!
const char* MyDir = "/";
DIR* directory = opendir(MyDir);
if (directory != NULL)
{
closedir(directory);
exit(0);
}
答案 2 :(得分: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);
}