c - malloc 的最佳实践是什么?

标签 c char malloc

如果以下任何一项是正确的并且被认为是创建能够容纳 100 个字符的 char 字符串的最佳实践?

char * charStringA = malloc(100);
char * charStringB = malloc(sizeof(char)*100);
char * charStringC = (char*)malloc(100);
char * charStringD = (char*)malloc(sizeof(char)*100);

最佳答案

char * charStringA = malloc(100);
char * charStringB = malloc(sizeof(char)*100);

两者同样正确。
此评估中应考虑的两个要点是:

  1. char 的大小由 C 标准保证为一个字节。
  2. void 指针可以分配给任何指针,而无需在 C 中进行显式转换,并且不需要进行转换。强制转换 malloc 的返回值被认为是一种不好的做法,原因如下:

What's wrong with casting malloc's return value?


以上答案适用于 OP 中提到的选项。更好的做法是使用 sizeof,而不对任何类型 的大小做任何假设。这就是 sizeof 存在的原因和目的。在这种情况下,最佳做法是使用:

char * charStringB = malloc(sizeof(*charStringB)*100);

请注意 *charStringBchar 相同,但这为您提供了灵 active ,如果您以后想更改 type 则可以需要记住进行修改的地方更少。

关于c - malloc 的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14099967/

相关文章:

c - 创建内部数组不需要 Malloc

c - VLA 和通过 malloc 进行动态内存分配有什么区别?

c++ - 如何为 OpenGL ES 重写 2D OpenGL 应用程序?

string - String 字符的 Scala int 值

c++ - 检查具有特定格式的字符数组值

C 字符数组无法正常工作

在两个结构指针之间复制数据会出现段错误

c - 如何计算字符串列表的出现次数并将其输出到新文件?

使用 C 将日期格式从 dd/mm/yyyy 转换为 yyyy/mm/dd

c - 从C/C++程序执行二进制(INTEL FSP)文件的最简单方法