直接の質問に答えるには、確かにです。strcat
を使用して書式設定された文字列を追加してください。あなただけの最初のフォーマットされた文字列を構築する必要があり、その後、あなたはそれを追加するstrcat
を使用することができます。
#include <stdio.h>
#include <string.h>
int main(void) {
char s[100];
char s1[20];
char s2[30];
int n = 42;
double x = 22.0/7.0;
strcpy(s, "n = ");
sprintf(s1, "%d", n);
strcat(s, s1);
strcat(s, ", x = ");
sprintf(s2, "%.6f", x);
strcat(s, s2);
puts(s);
return 0;
}
出力:
n = 42, x = 3.142857
しかし、これは特に良い方法ではありません。
sprintf
は、既存の文字列の最後にも同様に書き込みが行われます。例については、Mats's answerおよびmux's answerを参照してください。個々のフィールドを保持するために使用される個々の配列は、少なくともこの場合は必要ではありません。
このコードは文字列の最後を追跡しないため、パフォーマンスが低下する可能性があります。 strcat(s1, s2)
は、最初にs1
をスキャンして、終了を見つける必要があります。'\0'
と次にの内容をs2
にコピーしてください。他の答えは、索引やポインタを進めて文字列の終わりを追跡し、再計算することなくこれを回避します。
また、コードはバッファオーバーランを回避するための努力をしていません。 strncat()
はこれを行うことができますが、文字列を切り詰めるだけです。それは切り捨てられているとは言いません。 snprintf()
は良い選択です。十分なスペースがある場合は、にはと書かれた文字数が返されます。これが指定したサイズを超えた場合、文字列は切り捨てられました。
/* other declarations as above */
size_t count;
count = snprintf(s, sizeof s, "n = %d, x = %.6f", n, x);
if (count > sizeof s) {
/* the string was truncated */
}
と(一部は条件付きまたは繰り返し付加されている場合たとえば、)複数の文字列を追加するには、対象文字列の末尾を追跡するために他の回答のメソッドを使用することができます。
だから、strcat()
の書式設定された文字列を追加することは可能です。それは良いアイデアではないようです。
十分なスペースがあることを確認してください。 – SLaks