2017-02-11 1 views
0

декларация как это:C Язык. По умолчанию статические инициализированные строки каким-либо образом const?

char* string = "Test"; 

ли несет в себе определенную неявно сопзЬ?

Я хочу знать, имеет ли смысл следующий пример или нет.

const char* string = "Test"; 
char* const string = "Test"; 
const char* const string = "Test"; 
+0

C99 - _6.4.5: Для символьных строк литералов, элементы массива ** имеют символьный тип **, и инициализируются с отдельными байтами многобайтовая последовательность символов; _ но с другой стороны: _ Если программа пытается изменить такой массив, поведение не определено. –

ответ

2
char* string = "Test"; 

Не делай этого. Это должно дать предупреждение, потому что это действительно статическая строка, но это не так. Если вы напишете строку, она взорвется.

const char* string = "Test"; 

Исправить.

char* const string = "Test"; 

Неправильно. Это означает, что указатель string не может измениться, но его содержимое может, что не очень полезно, кроме неправильного.

const char* const string = "Test"; 

Исправить. Теперь ни указатель string, ни его содержимое не могут измениться. Я редко беспокоюсь о const с правой стороны от *, но у него есть свои возможности.

Если вы действительно хотите записываемая строку использовать

char string[] = "Test"; 
+0

Что не так с 'char * string =" Test ";' ??? Это абсолютно законное объявление постоянной строки. Это не вызывает предупреждения даже при компиляции строжайшими флагами. – DyZ

+1

Длительность хранения строки (или другого объекта) не влияет на то, связано ли с ней 'const' –

+0

' char * const string = "Test"; 'правильно в соответствии со стандартом C –

Смежные вопросы