Indice

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 <stdio.h>
#include <string.h>
#include <stdlib.h>
 
 
 
 
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;
}