2013-02-10 67 views
3

這個聲明有什麼問題?Char * string []聲明錯誤

char *add_element[] = {"1","S"}; 

我得到這個錯誤,當我編譯這個 -

warning: initialization discards qualifiers from pointer target type 

我在做什麼錯?

這個問題不同於Why I get; initializing 'char *' with an expression of type 'const char *' discards qualifiers?。這可以通過下面的評論來驗證。感謝您回答。

可能重複的問題是相關的,但不相同。這是關於爲什麼void func(const char * ptr){char * local = ptr; ...}會引發警告,而不是像這裏那樣處理初始化程序。我認爲這個問題不應該作爲該問題的重複來解決

+0

通常情況下,通過在Stack Overflow中搜索錯誤消息可以獲得很好的答案。 – dasblinkenlight 2013-02-10 16:56:49

+1

@dasblinkenlight我打算打印你的評論,並把它放在一個金色的框架中。 – 2013-02-10 16:57:40

+3

可能的重複問題是相關的,但不一樣。這是關於爲什麼'void func(const char * ptr){char * local = ptr; ...}引發警告,而不是像這裏那樣處理初始化程序。我不認爲這個問題應該作爲這個問題的重複來解決。 – 2013-02-10 17:01:46

回答

7

您似乎在使用GCC並且已打開-Write-strings。這使編譯器警告這種情況。它使字符串文字變爲const char數組而不是char數組,使您的初始化放棄const。使用方法:

const char *add_element[] = { "1", "S" }; 

或關閉-Wwrite-strings

從GCC手冊:

-Wwrite-strings

當編譯C,給字符串常量的類型const char[length]使得 複製一個的地址轉換成非constchar *指針將得到一個 警告。這些警告將幫助您在編譯時查找可嘗試 以寫入字符串常量的代碼,但前提是您在聲明和原型中使用const時一直非常小心 。否則,這隻會​​是一個令人討厭的問題。這就是爲什麼我們沒有讓-Wall請求這些警告。

編譯C++時,警告有關從字符串文字 到char *棄用的轉換。 C++程序默認啓用此警告。

+0

有人在這裏告訴我,由於歷史原因,字符串文字是'char []'。怎麼辦? – 2013-02-10 16:54:40

+0

如何正確聲明'add_element'? – 2013-02-10 16:54:41

+0

@JanDvorak'const char * add_element []'。 – 2013-02-10 16:54:56