gpt4 book ai didi

c - 应该使用 realloc 吗?

转载 作者:行者123 更新时间:2023-12-01 19:11:52 26 4
gpt4 key购买 nike

在查看了一些开源项目的 C 代码后,我不确定我做的是否正确。

当我创建字符串(char *)时,我通常这样做:

#define DEF_LEN 10
char *mystring;
mystring = malloc(DEF_LEN*sizeof(char));

当我更改字符串时(通常在函数内完成):

mystring = realloc(mystring, strlen(newstring)*sizeof(char)+1);
strcpy(mystring,newstring);

在很多开源项目中,我发现许多开发人员都这样做:

char another_string[1024];

问题:

  • 我对 realloc 的使用可以吗?
  • realloc 是性能 killer (如我的代码中/经常使用的那样)吗?

最佳答案

哇哦...

mystring = realloc(mystring, strlen(newstring) * sizeof(char) + 1);

很严重no-no in C 。如果realloc失败,那么您就失去了freemystring的能力,因为您已经用NULL覆盖了它。

就性能和可靠性而言,我一直喜欢堆栈上的固定长度缓冲区。这确实取决于您的要求。如果您的数据集有上限,那么使用固定长度缓冲区就很好。你只需要非常小心,不要超出缓冲区之类的。话又说回来,在 C 语言中,您始终必须关注 NUL 终止缓冲区并确保不会溢出它们。

关于c - 应该使用 realloc 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7699373/

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