LINUX.ORG.RU

Ответ на: комментарий от devinull

> Вопрос риторический, потому что *my_string - это char, а "string1" это указатель.

Вообще говоря, в условии этого не было.

char **my_string;

Legioner ★★★★★
()

указатели будут сравниваться

dilmah ★★★★★
()

В D возможна... :-[ Только без звездочки.

naryl ★★★★★
()

if(strcmp(my_string, "string1") == 0)
{

}
else if(strcmp(my_string, "string2") == 0)
{

}
...
else
{

}

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

generatorglukoff ★★
()

Я один раз видел такой код:

switch (*mystring)
{
case 'aa':...
case 'ab':...
}

Но это, скорее, из разряда анекдотов.

P.S. Разумеется, mystring не char *. В противном случае преобразование типов. 

Davidov ★★★★
()

Возможна, если в my_string находится именно тот "string1", что описан в case. Почти все компиляторы не дублируют строковые константы, поэтому если у них совпадает значение, будет совпадать и адрес. Но если my_string получается откуда-то ещё (strdup, ввод с клавиатуры, кусок другой строки), а не напрямую из константы *my_string = "string1";, то такой код работать не будет.

kmeaw ★★★
()
Ответ на: комментарий от kmeaw

Я чего то не пойму. У вас другой C что ли? Вообще то switch-case-ом можно сравнивать только int-ы, и всё, что к нему неявно приводится. Указатели к int-у неявно не приводятся.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

> Вообще то switch-case-ом можно сравнивать только int-ы, и всё, что к нему неявно приводится.

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.