它应该使用realloc吗?

时间:2011-10-08 19:51:29

标签: c malloc realloc

在查看一些开源项目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是性能杀手(我的代码/经常使用)吗?

1 个答案:

答案 0 :(得分:8)

哇那里......

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

是一个严重的no-no in C。如果realloc失败,那么您已经失去了free mystring的能力,因为您已使用NULL覆盖了它。

在性能和可靠性方面,我一直喜欢堆栈上的固定长度缓冲区。这确实取决于您的要求。如果您的数据集有上限,那么使用固定长度缓冲区非常棒。你必须非常小心,不要超越缓冲区,什么不是。然后,再次,在C中,你总是要关注NUL终止缓冲区并确保你不会超出它们。