Um die direkte Frage zu beantworten, ist es sicher möglichstrcat
zu verwenden, um formatierte Zeichenfolgen anzufügen. Sie haben sich dem formatierten String zu bauen, und dann können Sie strcat
es anhängen verwenden:
#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;
}
Ausgang:
n = 42, x = 3.142857
Aber das ist kein besonders guter Ansatz.
sprintf
funktioniert genauso gut am Ende einer vorhandenen Zeichenfolge schreiben.Beispiele siehe Mats's answer und mux's answer. Die einzelnen Arrays, die einzelne Felder enthalten, sind nicht notwendig, zumindest nicht in diesem Fall.
Und da dieser Code das Ende der Zeichenfolge nicht verfolgt, ist die Leistung wahrscheinlich schlecht. strcat(s1, s2)
muss zuerst s1
scannen, um den Abschluss zu finden '\0'
, und dann kopieren Sie den Inhalt von s2
hinein. Die anderen Antworten vermeiden dies, indem sie einen Index oder einen Zeiger vorrücken, um das Ende der Zeichenfolge zu verfolgen, ohne sie neu berechnen zu müssen.
Auch der Code unternimmt keine Anstrengungen, Pufferüberläufe zu vermeiden. strncat()
kann dies tun, aber es schneidet nur die Zeichenfolge ab; Es sagt Ihnen nicht, dass es abgeschnitten wurde. snprintf()
ist eine gute Wahl; es gibt die Anzahl der Zeichen zurück, die es geschrieben hätte, wenn genügend Speicherplatz verfügbar wäre. Wenn dies die von Ihnen angegebene Größe überschreitet, wurde die Zeichenfolge abgeschnitten.
/* 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 */
}
Und mehrere Strings (sagen wir, wenn einige bedingt oder wiederholt angehängt werden) anhängen, können Sie die Methoden in den anderen Antworten können Spur des Ende des Zielstrings zu halten.
Also ja, es ist möglich, formatierte Strings mit strcat()
anhängen. Es ist wahrscheinlich keine gute Idee.
Stellen Sie sicher, dass Sie genügend Platz haben. – SLaks