d_name 与生成核心转储的 cstring 进行比较
d_name comparison with a cstring generating core dump
我在 C++ 中使用 dirent.h 以获取目录中的可用目录和文件,除了可用目录和文件外,它还列出了一个“.”的问题。和 ”..”
为了删除它们,我在打印之前添加了一个 if 语句。
代码如下:
if ((dir = opendir (".")) != NULL) {
while ((ent = readdir (dir)) != NULL)
{
if( !strcmp( ent->d_name, "." )){
printf ("%s\n", ent->d_name);
}
closedir (dir);
}
}
else {
//could not open directory
printf("Error opening directory");
}
它没有给我一个编译错误,但在执行时却给了我
“双重自由或腐败(顶部):0x00000000016d3010 ***
中止(核心转储)”
我该如何解决?
!strcmp
比较是一个错误,但与崩溃无关。那是
由关闭目录然后尝试继续从中读取条目引起的。
在以下程序中,您的错误已被注释掉并得到更正。
#include <dirent.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
DIR * dir = NULL;
if ((dir = opendir (".")) != NULL) {
struct dirent * ent = NULL;
while ((ent = readdir (dir)) != NULL)
{
// if( !strcmp( ent->d_name, "." )){ <-- Bug you have yet to find.
if( strcmp( ent->d_name, "." )){
printf ("%s\n", ent->d_name);
}
// closedir (dir); <-- The cause of your crash
}
closedir (dir);
}
else {
//could not open directory
printf("Error opening directory");
}
return 0;
}
顺便说一句,这个程序的编写语言是C,而不是C++。
我在 C++ 中使用 dirent.h 以获取目录中的可用目录和文件,除了可用目录和文件外,它还列出了一个“.”的问题。和 ”..” 为了删除它们,我在打印之前添加了一个 if 语句。 代码如下:
if ((dir = opendir (".")) != NULL) {
while ((ent = readdir (dir)) != NULL)
{
if( !strcmp( ent->d_name, "." )){
printf ("%s\n", ent->d_name);
}
closedir (dir);
}
}
else {
//could not open directory
printf("Error opening directory");
}
它没有给我一个编译错误,但在执行时却给了我 “双重自由或腐败(顶部):0x00000000016d3010 *** 中止(核心转储)” 我该如何解决?
!strcmp
比较是一个错误,但与崩溃无关。那是
由关闭目录然后尝试继续从中读取条目引起的。
在以下程序中,您的错误已被注释掉并得到更正。
#include <dirent.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
DIR * dir = NULL;
if ((dir = opendir (".")) != NULL) {
struct dirent * ent = NULL;
while ((ent = readdir (dir)) != NULL)
{
// if( !strcmp( ent->d_name, "." )){ <-- Bug you have yet to find.
if( strcmp( ent->d_name, "." )){
printf ("%s\n", ent->d_name);
}
// closedir (dir); <-- The cause of your crash
}
closedir (dir);
}
else {
//could not open directory
printf("Error opening directory");
}
return 0;
}
顺便说一句,这个程序的编写语言是C,而不是C++。