如何复制或连接两个char *

时间:2012-05-15 21:50:42

标签: c++ strcpy strcat

如何连接或复制char *?

char* totalLine;

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

strcpy(totalLine,line1);
strcat(totalLine,line2);

此代码产生错误!

segmentation fault

我猜我需要将内存分配给totalLine?

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

char* totalLine;

const char* line1 = "hello";

 totalLine = line1;

提前致谢! :)

4 个答案:

答案 0 :(得分:15)

  

我猜我需要将内存分配给totalLine?

是的,你猜错了。 totalLine是一个未初始化的指针,因此那些strcpy调用正试图在内存中随机写入某个地方。

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

#include <string>

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

std::string totalLine = line1 + line2;

无需内存管理。

  

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

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

答案 1 :(得分: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';

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

答案 2 :(得分:0)

totalLine具有垃圾值

const char* Line1{ "Hallo" };  
const char* Line2{ "World" };   
char* TotalLine{ new char[strlen(Line1) + strlen(Line2) + 1] };

TotalLine = strcpy(TotalLine, Line1);
TotalLine = strcat(TotalLine, Line2);
  

注意=>如果您使用Visual Studio,则需要#define _CRT_SECURE_NO_WARNINGS

答案 3 :(得分:0)

将“ aaa”和“ bbb”集中到“ aaabbb”:

<iframe width='340' height='200' src="https://www.youtube.com/embed/MpGLUVbqoYQ?controls=0"></iframe>