#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)
答案 0 :(得分:7)
宏是给代码片段的名称。名称出现在源文件中的任何位置,都由代码片段替换。宏定义是C预处理器的指令。它们不是executed
意义上的陈述。它们在预处理阶段之后甚至不存在,因此不生成汇编代码。
MAXSTR
是一个由字符串文字"Maximum number reached"
替换的宏。字符串文字是只读的,它是未定义的行为,试图修改它们。因此,您应该使指针const
合格。
#define MAXSTR "Maximum number reached"
const char *str = MAXSTR; // make the pointer const
答案 1 :(得分:4)
将字符串文字分配给变量
这是一个可怕的错误消息。我很好奇Lint认为字符串文字是有益的,如果我们不能将它们分配给变量......它应该说:&#34;将字符串文字分配给非常量指针&#34;。< / p>
尝试抛弃const(或volatile)
警告不正确。同样,它应该告诉你指针变量需要是const
。
总而言之,您会收到这些错误,因为您的静态分析器工具很糟糕。
说明:
C中的字符串文字是字符数组char []
。遗憾的是,它们不被语言视为常量类型const char[]
。这是C语言中的缺陷,因为如果您尝试对字符串文字进行写访问,则会导致未定义的行为,并且程序可能会崩溃并烧毁。因此,必须将字符串文字视为const数组,即使它们不是。
因此,最好始终将指向字符串文字的指针声明为const char*
。
对于Lint,它似乎将字符串文字视为const char[]
,而不是{{1}}。因此,它会为您提供错误的错误,而不是指出实际问题。