【发布时间】:2011-12-03 16:53:30
【问题描述】:
在查看了一些开源项目的 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是性能杀手吗(在我的代码中/经常使用)?
【问题讨论】:
-
strlen(newstring)*sizeof(char)+1应该是(strlen(newstring)+1)*sizeof(char) -
@DavidHeffernan,也许更好,只是省略
sizeof(char)?在任何情况下,与1相乘并不重要,不是吗? -
@Jens 这需要假设
sizeof(char)==1并不总是成立。也就是说,我不确定它不支持哪些平台。 -
@DavidHeffernan,
sizeof运算符定义为以char大小的倍数形式给出数据类型的大小。 -
@David Heffernan:Qouth ISO/IEC 9899 标准(简称 C99),第 6.5.3.4.2 点:当应用于具有 char、unsigned char 或 signed char 类型的操作数时,(或其合格版本)结果为 1.