gpt4 book ai didi

将 malloc 的结果转换为 char(不是 char*)——为什么编译器不报错?

转载 作者:太空狗 更新时间:2023-10-29 14:56:27 25 4
gpt4 key购买 nike

tmpString = (char*)malloc((strlen(name) + 1) * sizeof(char));
tmpString = (char )malloc((strlen(name) + 1) * sizeof(char));

这两行有什么区别?

我的理解是第二行是错误的,但出于某种原因编译器什么也没说。

最佳答案

第一行将 malloc 返回的 (void) 指针转换为指向 char 的指针,从而保留其指针性。它只是告诉编译器“X 位置的内存应该被视为一个字符数组”。

第二次转换将 malloc 返回的指针转换为单个字符。由于多种原因,这很糟糕:

  • 你失去了指针,因为你刚刚把指针变成了完全不同的东西
  • 您还丢失了指针的大部分数值,因为字符的大小远小于指针的大小(在很多情况下,指针的大小为 32 位或 64 位,但字符只有 8 位)并且“多余的”位被丢弃。

我认为警告级别足够高的编译器应该警告第二个赋值。

关于将 malloc 的结果转换为 char(不是 char*)——为什么编译器不报错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15670977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com