gpt4 book ai didi

c - 在 C 中使用 Realloc

转载 作者:IT王子 更新时间:2023-10-28 23:38:55 25 4
gpt4 key购买 nike

它确实是关于使用 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;

}

最佳答案

是的是简短的回答。下面是它的外观:

if ( i >= buffer_size )
{
temp = realloc(buffer, buffer_size*2);
if (!temp)
reportError();
buffer_size *= 2;
buffer = temp;
}

请注意,您仍然需要使用临时指针来保存 realloc() 的结果;如果分配失败,您仍然拥有指向仍然有效的现有缓冲区的原始 buffer 指针。

关于c - 在 C 中使用 Realloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8319216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com