我在使用 C++,我正在使用一个 C 库,它有一个接受 char * 的 api。它不接受 const char *,即使 char * 中的数据不会被修改。
获取 c_str() 的结果并将其转换为“char *”以便与此 api 一起使用是否安全?
string str = "mydata";
char * cstr = const_cast<char*>(str.c_str());
c_api_lib_func(cstr);
最佳答案
是的,只要传递给它的函数不尝试修改字符串的内容,它就是安全的。
你甚至可以避免 const_cast
使用
c_api_lib_func(&str[0]);
请注意,这对于 C++11 之前的编译器在技术上是不安全的,因为 std::string
不需要为其内部缓冲区提供连续存储。
使用&str[0]
,函数甚至可以修改字符串内部缓冲区的内容,只要它离开terminating NULL character alone。 .
关于c++ - 将字符串的 c_str 的结果转换为 char* 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22239756/