Адресация адреса строкового литерала в C
char **s = &"Is this valid?";
Разрешено ли получение адреса, по которому хранится адрес строкового литерала, в C? Я знаю, что строковый литерал хранится в сегменте данных.rodata. Однако получение адреса по этому адресу не имеет смысла.
Следует отметить, что gcc компилирует это и создает рабочий исполняемый файл.
2 ответа
Решение
Ваш пример недействителен:
char **s = &"Is this valid?"; // Not valid, wrong type
Это действительно:
char (*s)[15] = &"Is this valid?"; // OK
Тип "Is this valid?"
является char[15]
, Тип указателя на массив 15 из char
является char (*)[15]
, Так что тип &"Is this valid?"
является char (*)[15]
,
Тип строкового литерала: char[N+1]
где N
длина строки
Тип &"Is this valid?"
является char (*)[15]
(т.е. указатель на массив длины 15 char
).
Ваш код недействителен, так как GCC скажет вам, если вы компилируете с -Wall
,