将std :: string转换为char*替代

Ske*_*ith 1 c++ string pointers char

我已经在google中进行了搜索并被告知这是不可能的,因为我只能char *从字符串中获取静态,所以我正在寻找替代方案.

下面是这样的情况:我有一个.txt文件,其中包含其他.txt文件和一些数字的列表,这样就可以将程序添加到无需重新编译的程序中.我使用an ifstream将文件名读入字符串.

它们所需的功能是期望char *不是a string,显然这种转换是不可能的.

我可以访问这个函数,但它调用另一个函数,char *所以我认为我坚持使用char *.

有没有人知道一个工作或另一种方式这样做?

Kon*_*lph 12

在C++中,如果需要non,我总是会执行以下操作const char*:

std::vector<char> buffer(str.length() + 1, '\0');
std::copy(str.begin(), str.end(), buffer.begin());
char* cstr = &buffer[0];
Run Code Online (Sandbox Code Playgroud)

第一行创建了一个可修改的字符串副本,该副本保证驻留在连续的内存块中.第二行获取指向此缓冲区开头的指针.请注意,向量是一个比字符串大的元素,以容纳空终止.

  • @TonyK我不同意`strcpy`更简单 - 完全没有.我在代码中犯的错误几乎都被编译器捕获了.`strcpy`代码没有这样的安全带.它只是悄悄泄漏内存或覆盖缓冲区.具有这种潜力的代码只是*永远不合适.关于`new char` /`strcpy`方法,对于"simpler"这个词的任何有意义的用法都没有"简单". (2认同)

Run*_*odt 6

您可以const char*使用c_str以下命令获取字符串:

std::string str = "foo bar" ;
const char *ptr = str.c_str() ;
Run Code Online (Sandbox Code Playgroud)

如果你只需要一个char*你必须复制,例如:

char *cpy = new char[str.size()+1] ;
strcpy(cpy, str.c_str());
Run Code Online (Sandbox Code Playgroud)

  • +1:复制是一种解决方案(只要你记得"删除"!). (2认同)