在查看一些开源项目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
是性能杀手(我的代码/经常使用)吗?答案 0 :(得分:8)
哇那里......
mystring = realloc(mystring, strlen(newstring) * sizeof(char) + 1);
是一个严重的no-no in C。如果realloc
失败,那么您已经失去了free
mystring
的能力,因为您已使用NULL
覆盖了它。
在性能和可靠性方面,我一直喜欢堆栈上的固定长度缓冲区。这确实取决于您的要求。如果您的数据集有上限,那么使用固定长度缓冲区非常棒。你必须非常小心,不要超越缓冲区,什么不是。然后,再次,在C中,你总是要关注NUL
终止缓冲区并确保你不会超出它们。