繁体   English   中英

#define一个字符串文字,然后将其分配给一个char *

[英]#define a string literal then assign it to a char*

#define MAXSTR "Maximum number reached"

char *str = MAXSTR;

在做这种操作的同时。 代码工作正常,但我得到lint错误。 我怎么解决它?

Error:
Assignment of string literal to variable 

如果我使用:

 #define MAXSTR "Maximum number reached"

 char *str = (char *) MAXSTR;

然后lint错误:

Attempt to cast away const (or volatile)

宏是给代码片段的名称。 名称出现在源文件中的任何位置,都由代码片段替换。 宏定义是C预处理器的指令。 从某种意义上讲它们不是executed语句。 它们在预处理阶段之后甚至不存在,因此不生成汇编代码。

MAXSTR是一个宏,由字符串文字"Maximum number reached"代替。 字符串文字是只读的,尝试修改它们是未定义的行为。 因此,您应该使指针const合格。

#define MAXSTR "Maximum number reached"

const char *str = MAXSTR;  // make the pointer const

将字符串文字赋值给变量

这是一个可怕的错误信息。 我很好奇Lint认为字符串文字是有益的,如果我们不能将它们分配给变量......它应该说:“将字符串文字分配给非常量指针”。

尝试抛弃const(或volatile)

警告不正确。 同样,它应该告诉你指针变量需要是const

总结一下,你会得到那些错误,因为你的静态分析器工具很糟糕。


说明:

C中的字符串文字是字符数组char [] 遗憾的是,它们不被语言视为常量类型const char[] 这是C语言中的缺陷,因为如果您尝试对字符串文字进行写访问,则会导致未定义的行为,并且程序可能会崩溃并烧毁。 因此,您必须将字符串文字视为const数组,即使它们不是。

因此,最好将指向字符串文字的指针声明为const char*

在Lint的情况下,它似乎将字符串文字视为const char[] ,而它们不是。 因此,它会为您提供错误的错误,而不是指出实际问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM