如何复制或连接两个char *(How to copy or concatenate two cha

2019-09-17 06:49发布

你如何串连或复制的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;

提前致谢! :)

Answer 1:

我猜,我需要分配内存以totalLine?

是的,你猜对了。 totalLine是未初始化的指针,因此那些strcpy呼叫尝试写入某个随机内存。

幸运的是,当你标记过这个C ++,你并不需要所有的打扰。 只要做到这一点:

#include <string>

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

std::string totalLine = line1 + line2;

无需内存管理。

做下面的副本存储或复制数据?

我想你的意思是“为基础字符串复制,或者只是指针?”。 如果是这样,那么就指针。



Answer 2:

是的,你需要分配内存以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]



Answer 3:

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



文章来源: How to copy or concatenate two char*