c - sizeof(char) 和 sizeof(char *) 的区别

标签 c malloc sizeof

我想知道 sizeof(char) 和 sizeof(char *) 之间是否有区别:

char *s;
s = malloc(sizeof(char*)*len + 1);

char *s;
s = malloc(sizeof(char)*len + 1);

这是一样的吗?

最佳答案

char 是一个字符,sizeof(char) 定义为 1。(N1570 6.5.3.4 sizeof 和 _Alignof 运算符,第 4 段)

char* 是一个指向字符的指针,sizeof(char*) 取决于环境。在 32 位环境中通常为 4 个,在 64 位环境中通常为 8 个。

sizeof(char*) > sizeof(char) 的典型环境中,malloc(sizeof(char*)*len + 1) 将(至少尝试) 如果 len 足够小不会导致整数溢出,则分配比 malloc(sizeof(char)*len + 1) 更多的内存。

关于c - sizeof(char) 和 sizeof(char *) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40679801/

相关文章:

c++ - 为什么结构体的 sizeof 不等于每个成员的 sizeof 之和?

c - gcc 编译错误 ‘sizeof’ 对不完整类型 ‘struct LadoSt’ 的无效应用

C: 在 BST 打印输出上解引用指向不完整类型错误的指针

无法理解静态变量的行为

c - 无论如何释放空指针或先检查?

c - 错误 - "(.text+0x0): multiple definition of ' 方法'“(C 程序)

c - 在同一程序中使用 mmap 和 malloc 分配内存是否安全?

c - 如何将动态分配的字符串添加到 C 中的字符串数组中?

c - 动态分配的变量大小

c - sizeof(数组)/sizeof(int)