closedir()导致内核转储
我在unix平台上用C编写的代码中有以下几行代码。请告诉我为什么在closedir()函数中转储内核。我可以成功打开路径指定的目录closedir()导致内核转储,c,core,closedir,C,Core,Closedir,我在unix平台上用C编写的代码中有以下几行代码。请告诉我为什么在closedir()函数中转储内核。我可以成功打开路径指定的目录 if (opendir(MyDir) != NULL ) { closedir((DIR *) MyDir); exit 0; } closedir(),而不是char*。希望closedir()did这样做是行不通的。尝试: #include <sys/types.h> #include <dir
if (opendir(MyDir) != NULL )
{
closedir((DIR *) MyDir);
exit 0;
}
closedir()
,而不是char*
。希望closedir()
did这样做是行不通的。尝试:
#include <sys/types.h>
#include <dirent.h>
DIR *dir;
if ((dir = opendir(MyDir)) != NULL)
closedir(dir);
#包括
#包括
DIR*DIR;
如果((dir=opendir(MyDir))!=NULL)
closedir(dir);
另外,您似乎添加了一个强制转换(DIR*)MyDir
,以抑制编译器警告。当编译器向您发出警告时,您应该找出它发出警告的原因。抑制警告不是正确的做法。closedir()
,而不是char*
。希望closedir()
did这样做是行不通的。尝试:
#include <sys/types.h>
#include <dirent.h>
DIR *dir;
if ((dir = opendir(MyDir)) != NULL)
closedir(dir);
#包括
#包括
DIR*DIR;
如果((dir=opendir(MyDir))!=NULL)
closedir(dir);
另外,您似乎添加了一个强制转换
(DIR*)MyDir
,以抑制编译器警告。当编译器向您发出警告时,您应该找出它发出警告的原因。抑制警告不是正确的做法。MyDir
必须是const char*
才能作为opendir
的参数
您需要opendir
中的结果才能传递到closedir
——您不能只是强制转换路径
const char* MyDir = "/";
DIR* directory = opendir(MyDir);
if (directory != NULL)
{
closedir(directory);
exit(0);
}
MyDir
必须是const char*
才能作为opendir
的参数
您需要opendir
中的结果才能传递到closedir
——您不能只是强制转换路径
const char* MyDir = "/";
DIR* directory = opendir(MyDir);
if (directory != NULL)
{
closedir(directory);
exit(0);
}
排字不正确。供参考:
opendir
需要一个目录名(char*)作为参数,并返回一个目录流(DIR*):
closedir
需要一个目录流(DIR*)作为参数,并返回一个int(成功时为0):
因此,您的代码应该如下所示:
const char* dirname;
DIR* mydir;
mydir = opendir(dirname);
if(mydir != NULL) {
closedir(mydir);
exit(0);
}
另请参见:类型转换不正确。供参考:
opendir
需要一个目录名(char*)作为参数,并返回一个目录流(DIR*):
closedir
需要一个目录流(DIR*)作为参数,并返回一个int(成功时为0):
因此,您的代码应该如下所示:
const char* dirname;
DIR* mydir;
mydir = opendir(dirname);
if(mydir != NULL) {
closedir(mydir);
exit(0);
}
另请参见:显示更多代码,“MyDir”是如何声明的?这甚至没有编译…显示更多代码,“MyDir”是如何声明的?这甚至不能编译…请不要在if中使用
=
。即使有额外的括号,那也只是坏代码。@Helltone:为什么是坏代码?想解释一下吗?在这种情况下需要额外的括号。(我本来可以写if(dir=opendir(MyDir))
如果我要写糟糕的代码[按照我的标准,有些人可能会发现它完全可以]。“if”是控制流。“如果”中的赋值被认为是有害的。一般来说,不要将分配放在任何控制结构中。顺便说一句,你的“坏代码示例”(有些人认为不错)会在gcc的最新版本中产生警告。是的,我知道如果
是什么。你是否也反对((c=getchar())!=EOF)?你说的是个人风格/品味的问题。@Alok,我同意Helton的观点。在您已经声明的while条件中,您只是将getchar()的结果传递给c。这很好,但是=对于比较无效。请不要在if中使用=
。即使有额外的括号,那也只是坏代码。@Helltone:为什么是坏代码?想解释一下吗?在这种情况下需要额外的括号。(我本来可以写if(dir=opendir(MyDir))
如果我要写糟糕的代码[按照我的标准,有些人可能会发现它完全可以]。“if”是控制流。“如果”中的赋值被认为是有害的。一般来说,不要将分配放在任何控制结构中。顺便说一句,你的“坏代码示例”(有些人认为不错)会在gcc的最新版本中产生警告。是的,我知道如果
是什么。你是否也反对((c=getchar())!=EOF)?你说的是个人风格/品味的问题。@Alok,我同意Helton的观点。在您已经声明的while条件中,您只是将getchar()的结果传递给c。这很好,但是=对于比较无效。谢谢道格拉斯,我得到了解决方案,我的代码现在工作正常。谢谢道格拉斯,我得到了解决方案,我的代码现在工作正常。