# 定义一个字符串文本,然后将其赋给char*

f2uvfpb9  于 2023-06-28  发布在  其他
关注(0)|答案(3)|浏览(97)
#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)
bzzcjhmw

bzzcjhmw1#

宏是为代码片段指定的名称。无论该名称在源文件中出现在何处,它都将被代码片段替换。宏定义是C预处理器的指令。它们不是语句,因为它们不是executed。它们甚至在预处理阶段之后都不存在,因此不会生成汇编代码。
MAXSTR是一个宏,它被字符串"Maximum number reached"替换。字符串文字是只读的,试图修改它们是未定义的行为。因此,您应该使指针const合格。

#define MAXSTR "Maximum number reached"

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

zzzyeukh2#

将字符串文字赋值给变量
这是一个可怕的错误消息。我很好奇Lint认为字符串文字有什么好处,如果我们不能将它们分配给变量...它应该这样说:“将字符串文字赋给非常量指针”。
尝试抛弃const(或volatile)
警告不正确。同样,它应该告诉您指针变量必须是const
总而言之,你得到这些错误是因为你的静态分析工具是坏的。
说明:
C中的字符串文字是字符数组char []。不幸的是,语言没有将它们视为常量类型const char[]。这是C语言中的一个缺陷,因为如果您尝试对字符串字面量进行写访问,则会导致未定义的行为,并且程序可能会崩溃和烧毁。所以你 * 必须 * 把字符串字面量当作常量数组来对待,即使它们不是。
因此,最好始终将指向字符串的指针声明为const char*
在Lint的情况下,它似乎将字符串字面量视为const char[],而不是。因此,它给你不正确的错误,而不是指出实际的问题。

mu0hgdu0

mu0hgdu03#

你可以复制字符串,只要确保它有足够的空间:

#define MAXSTR "Maximum number reached"

char str[100];

strcpy(str, MAXSTR);

相关问题