2013-02-15 52 views
0

我用來做以下聲明和用C初始化字符串的數組:警告從字符串常量轉換爲char *在初始化C字符串的數組

char *myTable[] = { 
    "ABC", "Y", "*", "*", 
    "WXYZ", "Y", "*", "*", 
    "MNO", "Y", "*", "*", 
    NULL, NULL,NULL, NULL 
}; 

的NULL的是供內部使用。

自從我搬到與gcc 4.4.6,我得到一個警告:

abc.cpp:74: warning: deprecated conversion from string constant to ‘char*’ 

什麼是初始化我的數組的正確方法是什麼?

回答

4

這是因爲你試圖放棄這些字符串的常量,並且編譯器足夠貼心,因爲試圖修改存儲這些常量字符串文本的內存導致了未定義的行爲 [1 ]

聲明你陣列const char *myTable[]


[1]:C99標準:6.7.8初始化§32

聲明char *p = "abc";定義p類型「‘指針char’」,並初始化其與長度爲4,其元素具有字符串文字被初始化爲指向一個對象類型「'的char陣列」。 如果嘗試使用p修改數組的內容,則行爲是未定義的。

+0

確實,我應該知道...... – Barth 2013-02-15 14:05:37

1

嘗試使用const char *而不是僅僅char*

1

這是因爲字符串文字是不變的,所以你必須使用const char *myTable[]

1

看起來像「hello world」的字符串是不可變的字符串常量。您必須聲明

const char *myTable[] = { 
    "ABC", "Y", "*", "*", 
    "WXYZ", "Y", "*", "*", 
    "MNO", "Y", "*", "*", 
    NULL, NULL,NULL, NULL 
}; 
相關問題