将std::string转换为char * alternative
Convert std::string to char * alternative
我在谷歌做了一个搜索,被告知这是不可能的,因为我只能从一个字符串中得到一个静态的char *
,所以我正在寻找一个替代方案。
情况如下:我有一个。txt文件,其中包含其他。txt文件的列表和一些数字,这样做是为了使程序可以在不重新编译的情况下添加。我使用ifstream
将文件名读入字符串。
他们需要的功能是期望char *
而不是string
,显然这种转换是不可能的。
我可以访问这个函数,但它调用另一个函数与char *
,所以我认为我卡住了使用char *
。
有谁知道这样做的工作或其他方法吗?
在c++中,如果需要非const
char*
,我总是这样做:
std::vector<char> buffer(str.length() + 1, ' ');
std::copy(str.begin(), str.end(), buffer.begin());
char* cstr = &buffer[0];
第一行创建了字符串的可修改副本,该副本保证驻留在连续的内存块中。第二行获取指向该缓冲区开头的指针。请注意,vector比字符串大一个元素,以适应null终止。
您可以使用c_str
:
const char*
到字符串std::string str = "foo bar" ;
const char *ptr = str.c_str() ;
如果你只需要一个字符*,你必须复制,例如:
char *cpy = new char[str.size()+1] ;
strcpy(cpy, str.c_str());
正如之前的海报所提到的,如果被调用的函数实际上修改了字符串,那么你将需要复制它。但是,为了将来的参考,如果您只是处理旧的c风格函数,该函数接受char*,但实际上不修改参数,则可以对c_str()调用的结果进行const-cast。
void oldFn(char *c) { // doesn't modify c }
std::string tStr("asdf");
oldFn(const_cast< char* >(tStr.c_str());
如果您需要std::string
的C兼容版本,则有c_str();
。见http://www.cppreference.com/wiki/string/basic_string/c_str
它不是static
,但const
。如果你的其他函数需要char*
(不需要const
),你可以抛弃constness(警告!)确保函数不修改字符串)或像codebolt建议的那样创建一个本地副本。别忘了把副本delete
!
不能直接将字符串传递给接受char*:
参数的函数吗?func(&string[0]);