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

Sam*_*Sam 9 c c++ pointers

我知道之间的区别:

char *a = "string";
char p[] = "string";
Run Code Online (Sandbox Code Playgroud)

来自*a,它充当以下......

     +-----+     +---+---+---+---+---+---+---+ 
  a: |  *======> | s | t | r | i | n | g |\0 |    
     +-----+     +---+---+---+---+---+---+---+ 
Run Code Online (Sandbox Code Playgroud)

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

char *b;
Run Code Online (Sandbox Code Playgroud)

我希望它将指针中的所有内容复制到一个点而不是指向a的内容.

     +-----+     +---+---+---+---+---+---+---+      
  a: |  *======> | s | t | r | i | n | g |\0 |    
     +-----+     +---+---+---+---+---+---+---+ 
  b: |  *======> | s | t | r | i | n | g |\0 |    
     +-----+     +---+---+---+---+---+---+---+ 
Run Code Online (Sandbox Code Playgroud)

这该怎么做 ?

Bau*_*gen 7

在C中,您可以分配一个新的缓冲区b,然后使用标准库函数复制您的字符串,如下所示:

b = malloc((strlen(a) + 1) * sizeof(char));
strcpy(b,a);
Run Code Online (Sandbox Code Playgroud)

注意+1在malloc为终止腾出空间'\0'.这sizeof(char)是多余的,但我用它来保持一致性.

在C++中,您应该使用更安全和更优雅std::string:

std::string b {a};
Run Code Online (Sandbox Code Playgroud)


leg*_*s2k 6

在C++中,你可以做到

char *b = new char[strlen(a) + 1]{};
std::copy(a, a + strlen(a), b);
Run Code Online (Sandbox Code Playgroud)

这是一个实例.虽然,我建议使用std::string它的安全性和易用性.