Это действительно пост для некоторых советов с точки зрения использования realloc, в частности, если бы я мог использовать его для упрощения моего существующего кода. По сути, то, что показано ниже, динамически выделяет некоторую память, если я превышаю 256, то размер массива необходимо увеличить, поэтому я выделяю временный массив с 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;
}
malloc
. - person Oliver Charlesworth   schedule 30.11.2011reverse
должен принять аргумент какconst char *
. - person Kerrek SB   schedule 30.11.2011