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