[英]#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.