C++如何将char*安全地转换为std::string?(代码示例)

admin 百科 12
用std::string构造函数接收char*安全的前提是:指针非空且指向以'\0'结尾的有效C字符串;若可能为空需判空处理;含嵌入'\0'时须指定长度;避免使用悬空指针。

C++如何将char*安全地转换为std::string?(代码示例)-第1张图片-佛山资讯网

直接用 std::string 构造函数接收 char* 是安全的,前提是该指针非空且指向以 '\0' 结尾的有效C风格字符串。

确保 char* 不为空

空指针传给 std::string 构造函数会引发未定义行为(通常崩溃)。转换前必须检查:

  • 显式判空再构造:
      const char* cstr = get_c_string();
      if (cstr != nullptr) {
        std::string s(cstr);
      } else {
        // 处理空指针,例如赋空串或抛异常
        std::string s;
      }

处理可能含嵌入空字符的二进制数据

char* 指向的是非C字符串(如含 '\0' 的二进制缓冲区),不能依赖默认构造函数——它会在首个 '\0' 截断。应配合长度使用:

  • 指定长度构造:
      const char* data = /* 可能含 '\0' */;
      size_t len = /* 实际字节数 */;
      std::string s(data, len); // 不依赖 '\0',按 len 取字节

避免悬空指针和生命周期问题

std::string 构造时会拷贝内容,不持有原始指针。但若 char* 指向栈上临时数组或已释放内存,构造前就已失效:

标签: 字节 工具 c++

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~