È davvero un post per qualche consiglio in termini di utilizzo di realloc, in particolare, se potessi utilizzarlo per semplificare il mio codice esistente. In sostanza, ciò che segue fa allocare dinamicamente un po 'di memoria, se passo oltre 256, quindi l'array deve essere aumentato di dimensioni, così ho malloc un array temporaneo, con 2x la dimensione, memcpy ecc. (Vedi sotto).Utilizzo di Realloc in C
Mi chiedevo solo se realloc potesse essere utilizzato nel codice sottostante, per semplificarlo, qualsiasi consiglio, codice di esempio o anche suggerimenti su come implementarlo è molto apprezzato!
Cheers.
void reverse(char *s) {
char p;
switch(toupper(s[0]))
{
case 'A': case 'E': case 'I': case 'O': case 'U':
p = s[strlen(s)-1];
while(p >= s)
putchar(p--);
putchar('\n');
break;
default:
printf("%s", s);
break;
}
printf("\n");
}
int main(void) {
char c;
int buffer_size = 256;
char *buffer, *temp;
int i=0;
buffer = (char*)malloc(buffer_size);
while (c=getchar(), c!=' ' && c!='\n' && c !='\t')
{
buffer[i++] = c;
if (i >= buffer_size)
{
temp = (char*)malloc(buffer_size*2);
memcpy(temp, buffer, buffer_size);
free(buffer);
buffer_size *= 2;
buffer = temp;
}
}
buffer[i] = '\0';
reverse(buffer);
return 0;
}
Una nota di stile: si dovrebbe preferire ** non ** a trasmettere il valore restituito di 'malloc'. –
E 'reverse' dovrebbe prendere l'argomento come' const char * '. –