- Codice: Seleziona tutto
p = (char *)malloc((N+N+1)*sizeof(char));
Moderatore: Staff
p = (char *)malloc((N+N+1)*sizeof(char));

p = (char *)malloc(N+N+1 /*dato che hai trovato la soluzione lo aggiungo*/)*sizeof(char)); p = malloc(N+N+1 /*dato che hai trovato la soluzione lo aggiungo*/);
Blizzard ha scritto:infatti straquoto la prima soluzione che hai postato che è senza dubbio infinitamente elegante
Blizzard ha scritto:E volendo, le puoi far ritornare un puntare al suo argomento di stringa concatenata (szSum): a volte risulta comodo: per esempio, la strcpy fa proprio cosi'.


@boh: il buon funzionamente della tua soluzione e' random. Suggerimento: pensa alla prima strcat()



boh ha scritto:E manca l'eventuale spazio per il terminatore![]()
- Codice: Seleziona tutto
p = (char *)malloc((N+N+1)*sizeof(char));
char str[N]char str[N+1]



char *boh(char *a, char *b)
{
static char out[4096];
strcpy(out, a);
strcat(out, b);
return(out);
}
@Blizzard: guarda il casting della malloc è pignoleria della mia prof, quindi figurati![]()




robbybby ha scritto:@boh
In
- Codice: Seleziona tutto
p = (char *)malloc((N+N)*sizeof(char));
strcat(p, str1);
strcat(p, str2);
C'e' un errore.
A te trovarlo.
Il free lo devi fare sempre. Questa e' una delle ragioni per cui, in un programma vero, una funzioni siffatta non sarebbe molto bella.

Blizzard ha scritto:ora che mi ero convinto anch'io che era meglio che ci arrivasse da solo![]()
- Codice: Seleziona tutto
char *boh(char *a, char *b)
{
static char out[4096];
strcpy(out, a);
strcat(out, b);
return(out);
}
perchè adotti questa soluzione???
gia lo static di per se non lo amo... ma poi la soluzione non è adattiva ma devi restare sempre nel range di caratteri 4095+1
inoltre con la static se non sbaglio se richiami la funzione vai a sovrascrivere il dato che hai precedentemente restituito e questo è codice pericoloso..
dico fandonie?????

Mario Vanoni ha scritto:> con il 3B2 dei tempi, OK, ogni byte contava, allora 512KB, oggi ho 4GB di memoria

ksniffer ha scritto:Per caso deve essere:
p = (char *)malloc((N+N+1)*sizeof(char));
strcat(p, str1);
strcat(p, str2);
Sì?


Mario Vanoni ha scritto:> out[0] = '\0';
@boh
aggiungi la riga sopra citata, scusa ul vecc

boh ha scritto:Ah ora ho capito!
La strcat sostituisce il terminatore con il primo carattere della stringa da concatenare, ma essendo che
non c'è ancora alcun terminatore all'interno di p, funziona appunto a random![]()
La strcpy d'altro canto copia anche il terminatore, quindi è rigoroso prima una strcpy e poi una strcat, è questo giusto?
(grazie ancora a Mario!)


Visitano il forum: Nessuno e 2 ospiti