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

标签 c++ c++11

我在使用 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/

相关文章:

c++ - 用 C++ 编写 html 网站脚本?

c++ - shared_ptr 问题从成员函数返回向上转换版本

c++ - 为什么模板模板参数没有按预期工作?

c++ - 使用 std::bind 中的 std::thread 和 std::function 以及带参数和非空返回的函数

c++ - opengl 3.3 核心配置文件渲染失败

c++ - 在其声明的函数之外引用对象数组

c++ - 将 argv 和 argc 传递给线程

C++ 作业 : Parallel Arrays from text file

c++ sqrt保证精度,上限/下限

c++ - 为什么这个模板总是评估为 false_type?