我在c ++中,而且我正在使用一个带有api的c库,它接受一个char *。它不接受const char *,即使char *中的数据不会被修改。
获取c_str()的结果并将其转换为'char *'以便与此api一起使用是否安全?
string str = "mydata";
char * cstr = const_cast<char*>(str.c_str());
c_api_lib_func(cstr);
答案 0 :(得分:4)
是的,只要您传递给它的功能不会尝试修改字符串的内容,它就是安全的。
您甚至可以避免const_cast
使用
c_api_lib_func(&str[0]);
请注意,使用pre-C ++ 11编译器在技术上这是不安全的,因为std::string
不需要为其内部缓冲区提供连续存储。
使用&str[0]
,该函数甚至可以修改字符串内部缓冲区的内容,只要它离开terminating NULL character alone。
答案 1 :(得分:1)
只要你的待遇是严格的只读,就不应该造成任何伤害。
答案 2 :(得分:-1)
不安全
此代码输出dydata
#include <iostream>
using namespace std;
int main()
{
string str = "mydata";
char * cstr = const_cast<char*>(str.c_str());
cstr[0] ='d';
cout <<str << endl;
return 0;
}