c++ - 如何复制 const char* 类型变量的内容?

标签 c++ c pointers

我知道它们之间的区别:

char *a = "string";
char p[] = "string";

来自*a,它的作用如下...

     +-----+     +---+---+---+---+---+---+---+ 
  a: |  *======> | s | t | r | i | n | g |\0 |    
     +-----+     +---+---+---+---+---+---+---+ 

如果我想创建另一个变量说

char *b;

我希望它复制指针 a 指向的所有内容,而不是指向 a 的内容。

     +-----+     +---+---+---+---+---+---+---+      
  a: |  *======> | s | t | r | i | n | g |\0 |    
     +-----+     +---+---+---+---+---+---+---+ 
  b: |  *======> | s | t | r | i | n | g |\0 |    
     +-----+     +---+---+---+---+---+---+---+ 

如何做到这一点?

最佳答案

在C++中,你可以这样做

const size_t n = strlen(a);   // excludes null terminator
char *b = new char[n + 1]{};  // {} zero initializes array
std::copy_n(a, n, b);

Live Example

但是我建议使用 std::string 而不是 C 风格的字符串,因为它是

  • 正确处理\0嵌入的字符串
  • 安全
  • 易于使用

关于c++ - 如何复制 const char* 类型变量的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26399643/

相关文章:

c - 从磁盘加载文件,加载一些额外的字符

c++ - 无法从 'int *' 转换为 'int []'?

c++ - 是否有 g++ 或 clang++ 调试选项来指导可变参数模板

模板调用之间的 C++ 转换

c - 文件交错、文件扫描、文件打印

连接服务器-客户端

c++ - 为什么所有 openGL 对象都存储在 GLuints 中?

c - 在C中动态分配内存给常量char指针?

c++ - 如何解决警告/usr/bin/ld : warning: libtiff. so.4,需要/home/user/libs/opencv/lib/libopencv_highgui.so,可能与libtiff.so.5冲突?

c++ - 是否可以创建一个链表来保存指针而不是整数或字符串?