C で 2 つの文字列を連結するにはどうすればいいですか? 質問する

C で 2 つの文字列を連結するにはどうすればいいですか? 質問する

2 つの文字列を追加するにはどうすればよいですか?

試してみましたname = "derp" + "herp";が、エラーが発生しました:

式は整数型または列挙型である必要があります

ベストアンサー1

C には、他の言語にあるような文字列のサポートはありません。C の文字列は、char最初の null 文字で終了する配列へのポインターにすぎません。C には文字列連結演算子はありません。

2 つの文字列を連結するために使用しますstrcat。これを行うには、次の関数を使用できます。

#include <stdlib.h>
#include <string.h>

char* concat(const char *s1, const char *s2)
{
    char *result = malloc(strlen(s1) + strlen(s2) + 1); // +1 for the null-terminator
    // in real code you would check for errors in malloc here
    strcpy(result, s1);
    strcat(result, s2);
    return result;
}

これは最も速い方法ではありませんが、今は心配する必要はありません。関数はヒープに割り当てられたメモリのブロックを呼び出し元に返し、そのメモリの所有権を渡すことに注意してください。メモリfreeが不要になった場合、呼び出し元がメモリを管理する責任があります。

次のように関数を呼び出します。

char* s = concat("derp", "herp");
// do things with s
free(s); // deallocate the string

パフォーマンスが気になる場合は、入力バッファを繰り返しスキャンしてヌル終端文字を探すのは避けた方がよいでしょう。

char* concat(const char *s1, const char *s2)
{
    const size_t len1 = strlen(s1);
    const size_t len2 = strlen(s2);
    char *result = malloc(len1 + len2 + 1); // +1 for the null-terminator
    // in real code you would check for errors in malloc here
    memcpy(result, s1, len1);
    memcpy(result + len1, s2, len2 + 1); // +1 to copy the null-terminator
    return result;
}

文字列を多用する作業を計画している場合は、文字列に対する第一級のサポートを備えた別の言語を使用する方がよい場合があります。

おすすめ記事