在我的项目中,我通过指定文件名来加载纹理。现在,我创建了这个函数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来实现功能。
答案 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()