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。これは 1 つの方法です。これはたまたま私が推奨する方法ですが、他にも同じように優れた方法がたくさんあります。

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 に答える