Сравнение буквальных пустых строк в C - PullRequest
4 голосов
/ 28 апреля 2011

В C, что следующие указанные должны делать?

if ("" == "")
{
    printf("Empty strings are equal\n");
}

У меня под рукой есть компилятор, который говорит мне, что "" действительно равно "".Но гарантировано ли это равенство?

Редактировать : я прекрасно понимаю, как сравнение указателей и сравнение строк работает в C. Я спрашиваю, какое поведение, если оно есть, указано вСтандарт C для постоянных пустых строк во время компиляции.Я считаю, что строки не гарантируются равными, но на практике обычно они равны, поскольку все пустые строки const будут подключены к одному и тому же адресу.Но я хочу знать, может ли кто-нибудь предоставить точную ссылку

Ответы [ 3 ]

12 голосов
/ 28 апреля 2011

Стандарт C говорит (6.4.5 / 6)

Не указано, различаются ли [строковые литералы]

5 голосов
/ 28 апреля 2011

Гарантированный? Я сомневаюсь. Вы сравниваете не содержимое строк, а их адреса, а это значит, что вы полагаетесь на то, что компилятор не создает две буквенные строки, которые имеют одинаковое содержимое в одном месте. Вероятно, это сработает, но не то, на что вы должны полагаться (и при этом неясно, для чего это полезно).

Редактировать: См. Также Почему "C"! = "A" в C? - у него есть ответ на практически тот же вопрос с почти сотней голосов (и был написан пользователем, чей компилятор сделал это по-другому).

0 голосов
/ 28 апреля 2011

Я не думаю, что есть какая-либо гарантия, что они будут иметь один и тот же адрес - я сомневаюсь, что стандарт потребует такого поведенияПочему вы должны зависеть от того, насколько это предсказуемо?

...