#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 error:
Attempt to cast away const (or volatile)
3条答案
按热度按时间bzzcjhmw1#
宏是为代码片段指定的名称。无论该名称在源文件中出现在何处,它都将被代码片段替换。宏定义是C预处理器的指令。它们不是语句,因为它们不是
executed
。它们甚至在预处理阶段之后都不存在,因此不会生成汇编代码。MAXSTR
是一个宏,它被字符串"Maximum number reached"
替换。字符串文字是只读的,试图修改它们是未定义的行为。因此,您应该使指针const
合格。zzzyeukh2#
将字符串文字赋值给变量
这是一个可怕的错误消息。我很好奇Lint认为字符串文字有什么好处,如果我们不能将它们分配给变量...它应该这样说:“将字符串文字赋给非常量指针”。
尝试抛弃const(或volatile)
警告不正确。同样,它应该告诉您指针变量必须是
const
。总而言之,你得到这些错误是因为你的静态分析工具是坏的。
说明:
C中的字符串文字是字符数组
char []
。不幸的是,语言没有将它们视为常量类型const char[]
。这是C语言中的一个缺陷,因为如果您尝试对字符串字面量进行写访问,则会导致未定义的行为,并且程序可能会崩溃和烧毁。所以你 * 必须 * 把字符串字面量当作常量数组来对待,即使它们不是。因此,最好始终将指向字符串的指针声明为
const char*
。在Lint的情况下,它似乎将字符串字面量视为
const char[]
,而不是。因此,它给你不正确的错误,而不是指出实际的问题。mu0hgdu03#
你可以复制字符串,只要确保它有足够的空间: