如何复制或连接两个char*

mis*_*ter 3 c++ strcpy strcat

如何连接或复制char*?

char* totalLine;

const char* line1 = "hello";
const char* line2 = "world";

strcpy(totalLine,line1);
strcat(totalLine,line2);
Run Code Online (Sandbox Code Playgroud)

此代码产生错误!

segmentation fault
Run Code Online (Sandbox Code Playgroud)

我猜我需要为totalLine分配内存?

另一个问题是,以下复制内存或复制数据?

char* totalLine;

const char* line1 = "hello";

 totalLine = line1;
Run Code Online (Sandbox Code Playgroud)

提前致谢!:)

Oli*_*rth 15

我猜我需要为totalLine分配内存?

是的,你猜对了. totalLine是一个未初始化的指针,所以这些strcpy调用试图写入内存中随机的某个地方.

幸运的是,当你标记这个C++时,你不需要为此烦恼.只需这样做:

#include <string>

std::string line1 = "hello";
std::string line2 = "world";

std::string totalLine = line1 + line2;
Run Code Online (Sandbox Code Playgroud)

无需内存管理.

执行以下复制内存或复制数据?

我认为你的意思是"是复制的底层字符串,还是指针?".如果是这样,那么只是指针.

  • `std :: string`有一个来自`char*`的构造函数,只需使用它. (5认同)
  • @dupdupdup:你可能不应该使用strtok().你应该问一个关于如何在C++中完成任务的另一个问题(因为你显然在写C而不是C++). (3认同)
  • @dupdupdup:你不需要知道大小.`const char*foo ="不管"; std :: string bar = foo;`应该可以正常工作. (2认同)

zwo*_*wol 7

是的,你需要分配内存totalLine.这是一种方法; 它恰好是我推荐的方式,但还有许多其他方法同样好.

const char *line1 = "hello";
const char *line2 = "world";

size_t len1 = strlen(line1);
size_t len2 = strlen(line2);

char *totalLine = malloc(len1 + len2 + 1);
if (!totalLine) abort();

memcpy(totalLine,        line1, len1);
memcpy(totalLine + len1, line2, len2);
totalLine[len1 + len2] = '\0';
Run Code Online (Sandbox Code Playgroud)

[编辑:我写这个答案假设这是一个C问题.在C++中,正如Oli建议的那样,只需使用std::string.]