std :: string.c_str()返回一个奇怪的字符

时间:2013-03-16 12:56:23

标签: visual-c++ char stdstring

在我的项目中,我通过指定文件名来加载纹理。现在,我创建了这个函数const char* app_dir(std::string fileToAppend);,它返回main s argv[0]并通过fileToAppend更改应用程序名称。由于我无法使用char *轻松进行字符串操作,因此我使用std::string。我的纹理加载器为文件名采用const char *,因此需要切换回c_str(),现在它生成一系列ASCII符号字符(bug)。我已经通过将app_dir()的返回类型更改为std::string来解决问题。但为什么会这样呢?

修改

示例代码:

//in main I did this

extern std::string app_filepath;

int main(int argc, char** arv) {

    app_filepath = argv[0];

    //...

}

//on other file

std::string app_filepath;

void remove_exe_name() {

    //process the app_filepath to remove the exe name

}

const char* app_dir(std::string fileToAppend) {

    string str_app_fp = app_filepath;

    return str_app_fp.append(fileToAppend).c_str();

    //this is the function the generates the bug

}

如前所述,我已经通过将其返回类型更改为std :: string来实现功能。

2 个答案:

答案 0 :(得分:0)

当您使用函数 const char * app_dir(std :: string fileToAppend); 时,您将获得指向堆栈上分配的内存的指针,并在函数结束时删除。

答案 1 :(得分:0)

一个很大的没有:)返回指向本地对象的指针

return str_app_fp.append(fileToAppend).c_str();

将您的功能更改为

std::string app_dir(const std::string& fileToAppend) {

string str_app_fp = app_filepath + fileToAppend;

return str_app_fp;

}

在返回值上使用c_str()