Per rispondere alla domanda diretta, è possibile che sia utilizzare strcat
per aggiungere stringhe formattate. Devi solo per costruire la stringa formattata prima, e quindi è possibile utilizzare strcat
per aggiungerlo:
#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;
}
uscita:
n = 42, x = 3.142857
ma questo non è un buon approccio particolarmente.
sprintf
funziona come scrivere alla fine di una stringa esistente.Vedi Mats's answer e mux's answer per esempi. Le singole matrici utilizzate per contenere singoli campi non sono necessarie, almeno non in questo caso.
E poiché questo codice non tiene traccia della fine della stringa, è probabile che le prestazioni siano scadenti. strcat(s1, s2)
per prima cosa deve cercare s1
per trovare la terminazione '\0'
e quindi copiare il contenuto di s2
in esso. Le altre risposte evitano questo facendo avanzare un indice o un puntatore per tenere traccia della fine della stringa senza doverla ricalcolare.
Inoltre, il codice non fa alcuno sforzo per evitare sovraccarichi del buffer. strncat()
può farlo, ma tronca la stringa; non ti dice che è stato troncato. snprintf()
è una buona scelta; restituisce il numero di caratteri che avrebbe scritto se fosse disponibile spazio sufficiente. Se supera la dimensione specificata, la stringa è stata troncata.
/* 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 */
}
E per aggiungere più stringhe (per esempio, se alcuni vengono aggiunti condizionatamente o più volte), è possibile utilizzare i metodi nelle altre risposte per tenere traccia della fine della stringa di destinazione.
Quindi sì, è possibile aggiungere stringhe formattate con strcat()
. Non è probabile che sia una buona idea.
Assicurarsi di disporre di spazio sufficiente. – SLaks