你如何串连或复制的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;
提前致谢! :)
我猜,我需要分配内存以totalLine?
是的,你猜对了。 totalLine
是未初始化的指针,因此那些strcpy
呼叫尝试写入某个随机内存。
幸运的是,当你标记过这个C ++,你并不需要所有的打扰。 只要做到这一点:
#include <string>
std::string line1 = "hello";
std::string line2 = "world";
std::string totalLine = line1 + line2;
无需内存管理。
做下面的副本存储或复制数据?
我想你的意思是“为基础字符串复制,或者只是指针?”。 如果是这样,那么就指针。
是的,你需要分配内存以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 ++中,如奥利建议,只是使用std::string
。 ]
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