它应该使用realloc吗?

Jon*_*lli 2 c malloc realloc

看了一些开源项目的C代码之后,我不确定我是不是做得对.

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

#define DEF_LEN 10
char *mystring;
mystring = malloc(DEF_LEN*sizeof(char));
Run Code Online (Sandbox Code Playgroud)

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

mystring = realloc(mystring, strlen(newstring)*sizeof(char)+1);
strcpy(mystring,newstring);
Run Code Online (Sandbox Code Playgroud)

在许多开源项目中,我看到许多开发人员只是这样做:

char another_string[1024];
Run Code Online (Sandbox Code Playgroud)

问题:

  • 我的用法realloc好吗?
  • realloc性能杀手(在我的代码/经常使用)?

D.S*_*ley 8

哇那里......

mystring = realloc(mystring, strlen(newstring) * sizeof(char) + 1);
Run Code Online (Sandbox Code Playgroud)

是一个严重的禁忌用C.如果realloc失败,那么你已经失去了你的能力,free mystring因为你用它覆盖了它NULL.

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