
Codice: Seleziona tutto
p = (char *)malloc((N+N+1)*sizeof(char));
Moderatore: Staff
Codice: Seleziona tutto
p = (char *)malloc((N+N+1)*sizeof(char));
Codice: Seleziona tutto
p = (char *)malloc(N+N+1 /*dato che hai trovato la soluzione lo aggiungo*/)*sizeof(char));
Codice: Seleziona tutto
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));
Codice: Seleziona tutto
char str[N]
Codice: Seleziona tutto
char str[N+1]
Codice: Seleziona tutto
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
InCodice: 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!)