在 malloc 的返回值类型周围添加括号

问题描述

当我希望使用 malloc 分配一些内存时,我尝试了以下方法:

(char *) conc_str = (char *) malloc(1);
char *conc_str2 = (char *)malloc(1);

然而,第一个给了我一个错误,说“标识符“conc_str”是 undefinedC/C++(20)”。为什么它会抛出错误而第二种分配内存的方式不会?使用 (char *) 与使用 char * 有什么区别?

解决方法

这一行:

(char *) conc_str = (char *) malloc(1);

是对名为 conc_str 的现有变量执行强制转换并尝试为强制转换结果赋值的语句。这是无效的,原因有两个:conc_str 尚未定义且无法分配强制转换的结果。

虽然这一行:

char *conc_str2 = (char *)malloc(1);

是变量 conc_str2定义,指定 char * 作为其类型,并使用 malloc 返回的值对其进行初始化。

此外,您不应强制转换 malloc 的返回值,因为它不是必需的,并且会掩盖代码中的其他问题。

,

您可以将声明符括在括号中,但不能将类型说明符括起来。

例如这些声明是有效的

char *conc_str2;

char * ( conc_str2 );

char ( *conc_str2 );

char ( * ( conc_str2 ) );  

虽然编译器可以发出消息,说明使用了多余的括号。

至于这样的表达

(char *) conc_str

然后将已经(某处)声明的(如果确实声明了)变量 conc_str 强制转换为类型 char *

因此这个记录

(char *) conc_str = (char *) malloc(1);

不是声明而是赋值语句,即使变量 conc_str 已经声明,因为操作数 (char *) conc_str 是可能无法赋值的右值,它也是不正确的语句。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...