簡體   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