Salve. Qualcuno potrebbe spiegarmi perchè il mio programma va in crash?
Una stringa contiene nome e cognome di una persona separati tra loro da uno o piu` spazi. Una seconda stringa contiene il soprannome di una persona, e pu`o eventualmente contenere degli spazi. Si scriva una funzione C che prende in ingresso due stringhe del tipo suddetto e restituisce una nuova stringa in cui tra il nome ed il cognome `e inserito il soprannome tra parentesi tonde. Nella nuova stringa, sia tra il nome e la parantesi aperta che tra la parentesi chiusa ed il cognome deve essere presente uno (ed un solo) spazio. Ad esempio, se le due stringhe sono "Bruce Springsteen" e "The Boss", la stringa restituita deve essere: "Bruce (The Boss) Springsteen".
#include <stdio.h>
#include <stdlib.h>
char* aggiungi_soprannome(char *nome_cogn, char *soprannome) {
char* ris;
int i, j, k;
int num_spazi = 0;
for(k=0; nome_cogn[k]!='\0'; k++){
if(nome_cogn[k]==' '){
num_spazi++;
}
}
ris = malloc(strlen(nome_cogn)-num_spazi+strlen(soprannome)+5);
//5 contando 2 spazi, le due parentesi, e il carattere di terminazione
for(k=0; nome_cogn[k]!=' '; k++){
ris[k] = nome_cogn[k];
}
j=k;
ris[j]=' ';
j++;
ris[j]='(';
j++;
for(i=0; soprannome[i]!='\0'; i++){
ris[j]=soprannome[i];
j++;
}
ris[j]=')';
j++;
ris[j]= ' ';
j++;
for(; nome_cogn[k]==' '; k++);
for(; nome_cogn[k]!='\0';k++){
ris[j] = nome_cogn[k];
j++;
}
ris[j]='\0';
return *ris;
}
int main(void){
printf("%s",aggiungi_soprannome("Vincenzo Rossi", "il bello"));
return 0;
}