C で const/literal 文字列を連結するにはどうすればいいですか? 質問する

C で const/literal 文字列を連結するにはどうすればいいですか? 質問する

私は C で作業しており、いくつかのものを連結する必要があります。

今私はこれを持っています:

message = strcat("TEXT ", var);

message2 = strcat(strcat("TEXT ", foo), strcat(" TEXT ", bar));

C の経験がある方なら、これを実行しようとするとセグメンテーション エラーが発生することに気付いたはずです。では、これを回避するにはどうすればよいですか?

ベストアンサー1

C では、「文字列」は単なるchar配列です。したがって、他の「文字列」と直接連結することはできません。

strcat関数を使用すると、 が指す文字列をsrcが指す文字列の末尾に追加できますdest

char *strcat(char *dest, const char *src);

こちらはcplusplus.com からの例:

char str[80];
strcpy(str, "these ");
strcat(str, "strings ");
strcat(str, "are ");
strcat(str, "concatenated.");

最初のパラメータには、宛先バッファ自体を指定する必要があります。宛先バッファは char 配列バッファである必要があります。例:char buffer[1024];

最初のパラメータに、コピーしようとしているものを格納するのに十分なスペースがあることを確認してくださいstrcpy_s。 および などの関数を使用できる場合は、strcat_sコピー先バッファのサイズを明示的に指定する必要があるため、より安全です。

注意: 文字列リテラルは定数であるため、バッファとして使用することはできません。したがって、バッファには常に char 配列を割り当てる必要があります。

の戻り値はstrcat単に無視できます。最初の引数として渡されたものと同じポインターを返すだけです。これは利便性のために用意されており、呼び出しを 1 行のコードに連結できます。

strcat(strcat(str, foo), bar);

したがって、問題は次のように解決できます。

char *foo = "foo";
char *bar = "bar";
char str[80];
strcpy(str, "TEXT ");
strcat(str, foo);
strcat(str, bar);

おすすめ記事