Это действительно пост для некоторых советов с точки зрения использования realloc, более конкретно, если бы я мог использовать его для упрощения моего существующего кода. По сути, то, что делает ниже, он динамически выделяет некоторую память, если я превысил 256, тогда массив необходимо увеличить в размере, поэтому я malloc временный массив с 2-кратным размером, memcpy и т. Д. (См. Ниже).
Мне просто было интересно, можно ли использовать realloc в приведенном ниже коде, чтобы упростить его, любые советы, примеры кода или даже подсказки о том, как его реализовать, очень ценятся!
Ура.
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;
}