簡體   English   中英

警告在初始化C字符串數組時從字符串const轉換為char *

[英]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 to char ”的指針定義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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM