[英]Warning converting from string const to char* in initializing array of C strings
我曾經做以下工作來聲明和初始化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*’
初始化數組的正確方法是什么?
這是因為您正試圖放棄這些字符串文字的常量性,並且編譯器會考慮周全地警告您,因為嘗試修改存儲這些常量字符串文字的內存會導致未定義的行為 [1]
將數組聲明為const char *myTable[]
[1]: C99標准:6.7.8初始化§32 :
聲明
char *p = "abc";
用類型為“ pointer tochar
”的指針定義p
,並將其初始化為指向長度為4的“char
型數組”類型的對象,該對象的元素使用字符串文字進行初始化。 如果試圖使用p
來修改數組的內容,則該行為是不確定的。
嘗試使用const char *
而不是char*
。
這是因為字符串文字是常量,所以您必須使用const char *myTable[]
。
看起來像“ hello world”的字符串是一個不變的字符串常量。 您必須聲明
const char *myTable[] = {
"ABC", "Y", "*", "*",
"WXYZ", "Y", "*", "*",
"MNO", "Y", "*", "*",
NULL, NULL,NULL, NULL
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.