====== Concatenare stringhe di puntatori a char ======
Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **// 10/06/2024 - 18:40 //** // //
Esistono diversi modi di concatenare stringhe in C, per quanto riguarda la concatenazione di vettori di char si utilizza normalmente ''strcat(...)'' contenuta in ''string.h'', invece per quanto riguarda la concatenazione di puntatori a char si possono fare diverse altre acrobazie .
===== Esempio di concatenazione con sprintf =====
In questo primo esempio di concatenazione non è necessario includere ''string.h'' .
char *s1="Pane e "; //stringa 1
char *s2="vino"; //stringa 2
/*Alloco per s3 il numero di byte somma di s1+s2, in
pratica s3 dovra contenere le due stringhe e quindi deve avere una dimenzione adeguata*/
char *s3=malloc(sizeof(s1)+sizeof(s2));
//metto s1 e s2 in s3, le attacco, difatti %s%s vuol dire appunto questo
sprintf(s3 ,"%s%s",s1,s2);
printf("Il valore di s3 -> %s\n",s3); //stampo sul video s3
==== Concatenare 2 stringhe e un intero ====
Seguendo questo principio è possibile concatenare stringhe a interi e altri tipi di dato, in quanto verrà tutto messo dentro una stringa di adeguata capienza.
char *s1="Pane e "; //stringa 1
char *s2="vino"; //stringa 2
char i = 3; //intero
/*Alloco per s3 il numero di byte somma di s1 + s2 + i, in
pratica s3 dovra contenere le due stringhe e l' intero i e quindi deve avere una dimenzione adeguata*/
char *s3=malloc(sizeof(s1)+sizeof(s2)+sizeof(i));
//metto s1 , s2 e i in s3, le attacco, difatti %s%s vuol dire appunto questo
sprintf(s3 ,"%s%s%d",s1,s2,i);
printf("Il valore di s3 -> %s\n",s3); // stampo il risultato
Ancora altri esempi:
#include
#include
#include
int main(int argc, char** argv)
{
char *str1="Hello ";
char *str2="world ";
char *str3="again! ";
char *text=malloc(sizeof(str1)+sizeof(str2)+sizeof(str3)+1);
sprintf(text,"%s%s%s",str1,str2,str3);
printf("%s\n", text);
char* str4="For last time!";
char* text2=strdup(text);
text2=malloc(sizeof(text)+sizeof(str4)+1);
sprintf(text2, "%s%s", text,str4);
printf("%s\n", text2);
return 0;
}