Предупреждение преобразования из строки const в char * при инициализации массива строк C

Я использовал следующее, чтобы объявить и инициализировать массив строки в 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"; определяет p с указателем типа ” to char ” и инициализирует его, указывая на объект с типом ” array of char ” с длиной 4, элементы которого инициализируются литералом строковой буквы. Если для изменения содержимого массива сделана попытка использовать p , поведение не определено.

Попробуйте использовать const char * вместо char* .

Это потому, что строковые литералы являются постоянными, поэтому вам нужно использовать const char *myTable[] .

строка, которая выглядит как «hello world», является неизменной константой строки. Вы должны объявить

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