私は 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);