4

您如何将 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

4 回答 4

15

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

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

幸运的是,当您标记了这个 C++ 时,您无需为所有这些烦恼。只需这样做:

#include <string>

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

std::string totalLine = line1 + line2;

无需内存管理。

下面是复制内存还是复制数据?

我认为您的意思是“是复制了基础字符串,还是仅复制了指针?”。如果是这样,那么只是指针。

于 2012-05-15T21:52:47.450 回答
8

是的,您需要将内存分配给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. ]

于 2012-05-15T21:54:28.553 回答
1

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

于 2019-06-15T15:07:58.027 回答
0

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

#include <iostream>
#include <cstring>
using namespace std;

int main() {
    const char* Line1 ="aaa";
    const char* Line2 ="bbb";
    char* TotalLine{ new char[strlen(Line1) + strlen(Line2) + 1] };
    TotalLine = strcpy(TotalLine, Line1);
    TotalLine = strcat(TotalLine, Line2);   
    cout << TotalLine <<endl;
}
于 2020-04-14T03:00:52.777 回答