我知道之间的区别:
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)
这该怎么做 ?
在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)
在C++中,你可以做到
char *b = new char[strlen(a) + 1]{};
std::copy(a, a + strlen(a), b);
Run Code Online (Sandbox Code Playgroud)
这是一个实例.虽然,我建议使用std::string它的安全性和易用性.
| 归档时间: |
|
| 查看次数: |
6461 次 |
| 最近记录: |