将字符串的c_str的结果转换为char *是否安全?

时间:2014-03-07 01:33:56

标签: c++ c++11

我在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);

3 个答案:

答案 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;
}