PnP*_*PnP 6 c memory dynamic realloc
就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;
Run Code Online (Sandbox Code Playgroud)
}
Gra*_*and 12
是的是简短的答案.这是它的样子:
if ( i >= buffer_size )
{
temp = realloc(buffer, buffer_size*2);
if (!temp)
reportError();
buffer_size *= 2;
buffer = temp;
}
Run Code Online (Sandbox Code Playgroud)
请注意,您仍然需要使用临时指针来保存结果realloc(); 如果分配失败,您仍然具有buffer指向仍然有效的现有缓冲区的原始指针.
| 归档时间: |
|
| 查看次数: |
14041 次 |
| 最近记录: |