Concatenazione di due stringhe

di il
7 risposte

Concatenazione di due stringhe

Come da titolo un esercizio che richiedeva la concatenazione di due stringhe non riesco a capire dove sbaglio o.o

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *concatenaStr(char *s0, char *s1)
{
char* s01;
s01 = (char*)malloc((strlen(s0)+strlen(s1)+1)*sizeof(char));
strcpy(s01,s0);
strcat(s01,s1);
return(s01);
};
int main(){
char* nome1;
char* nome2;
strcpy(nome1,"mario");
strcpy(nome2,"luca");
char* c;
c=concatenaStr(nome1,nome2);

int i = 0;
while(*(c+i) != 0) {
printf("%c" ,*(c+i));
++i;
}
return 0;
}

7 Risposte

  • Re: Concatenazione di due stringhe

    E' un errore sulle nozioni di base dei puntatori ...

    Utilizzi due puntatori (nome1 e nome2) senza avere allocato la memoria prima di fare le strcpy
  • Re: Concatenazione di due stringhe

    oregon ha scritto:


    E' un errore sulle nozioni di base dei puntatori ...

    Utilizzi due puntatori (nome1 e nome2) senza avere allocato la memoria prima di fare le strcpy
    come posso allocare la memoria senza sapere la dimensione dei due nomi che vado ad inserire?cmq grazie
  • Re: Concatenazione di due stringhe

    Stai facendo due copie dei nomi

    mario
    luca

    e il primo ha lunghezza 5+1, il secondo 4+1

    In che senso "non conosci la lunghezza" ??
  • Re: Concatenazione di due stringhe

    oregon ha scritto:


    Stai facendo due copie dei nomi

    mario
    luca

    e il primo ha lunghezza 5+1, il secondo 4+1

    In che senso "non conosci la lunghezza" ??
    cioè adesso conosco la lunghezza dei due nomi, e potrei fare una malloc con 6*sizeof(char) e quindi allocare abbastanza memoria per inserire i due nomi ,ma se poi voglio inserirli da tastiera come faccio ad allocare memoria prima di fare strcpy ?
  • Re: Concatenazione di due stringhe

    Questa è un'altra storia. L'errore in quel programma lo hai per quello che ti ho detto.

    Se devi fare l'input da tastiera allocherai un certo spazio iniziale (che so, 2000 caratteri) per poi ridurlo a quello che effettivamente ti serve dopo l'input.
  • Re: Concatenazione di due stringhe

    Sisi ora il programma va...quindi se voglio inserirlo da tastiera devo usare per forza le funzioni malloc e free.perfetto grazie 1000
  • Re: Concatenazione di due stringhe

    gabriele391 ha scritto:


    sisi ora il programma va...quindi se voglio inserirlo da tastiera devo usare per forza le funzioni malloc e free.perfetto grazie 1000
    Non è detto che devi usare le malloc/free se usi l'input da tastiera. Nessuno ti vieta di usare un buffer statico di dimensioni fisse.

    L'unico obbligo che hai per usare le stringhe è di allocare in qualche modo lo spazio necessario.
Devi accedere o registrarti per scrivere nel forum
7 risposte