如何连接或复制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;
提前致谢! :)
答案 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>