在使用c_str()转换路径类型后,为什么opendir()不会打开路径?

时间:2015-09-30 20:59:50

标签: c++ string c++11 opendir

我正在尝试打开一个目录,其名称( path )当前位于最初来自.csv文件的std :: string中(虽然我不认为改变关于字符串本身的任何内容)。调用opendir(path.c_str())返回NULL。我尝试了以下代码,在opendir()之外进行转换:

DIR *dir;
bool first = True;
string level = "";
struct dirent *ent;

const char * c = path.c_str();
// A
if ((dir = opendir(c)) != NULL){
    // do stuff
    // should open the directory and go here
}else{
    // always ends up here
}

虽然这与path =“LeanDataBase”失败,但项目文件夹中的目录,用opendir(“LeanDataBase”)替换opendir(c)似乎确实打开了该目录。但是,这个函数是递归的,所以我不能对这个值进行硬编码,或者它不起作用并陷入无限循环。

我也试过打印这些类型,在前面的代码中“A”之后插入了以下两行:

cout << typeid(c).name() << endl;
cout << typeid("LeanDataBase").name() << endl;

产生了以下输出:

PKc
A13_c

这是否意味着我将错误的类型传递给opendir()?它似乎可以处理PKc,但不能处理A13_c。有没有办法将路径字符串转换为正确的类型?

1 个答案:

答案 0 :(得分:4)

看看我的结晶球,我看到以下问题:在调用path.c_str()之后但在调用opendir()之前修改了路径(甚至离开了范围)。在任何变量中记住c_str()的结果通常是一种不好的做法,因为它会导致这样的问题。 c_str()用于就地使用,如下面的

opendir(path.c_str());