2015-03-10 2 views
-4

почему мы не можем сравнить две строки в С программой directly.For примером я пробовал следующий примерпочему мы не можем сравнить две строки непосредственно в с

char *str="int"; 
if(str=="int") 
printf("yes"); 
else 
printf("no"); 

Для выше я получил выход в «нет» Я попытался выше код, используя ту же логику, что если для целых т.е.

int i=10; 
if(i==10) 
printf("same"); 

Но когда я изменил код выше как следующий

if((strcmp(str,"int"))==0) 
printf("yes"); 

Я получил выход в «да» Что проблема в первом указанного кода?

+0

указатель на символ не является int – Cyclonecode

+0

Совет: перед тем, как задать вопрос, попробуйте сами найти ответ. Вопрос чрезвычайно прост (отсюда и вниз). Спросите его, что вы вложили очень мало усилий. Это смущает вас и раздражает нас. Я был хорош и все равно ответил - если предположить, что вы пришли, скажем, C#, это может быть немного озадачивающим. Но имейте в виду, что C# сделал специальные меры для строк, или они не были бы «равными» в соответствии с 'operator ==' либо! Не более, чем любой средний ссылочный тип по вашему выбору. –

+0

В некотором роде ответ должен быть «вы можете»; однако результат не будет тем, что вы ожидаете, потому что ваши указатели сравнения, а не символы, на которые они указывают. =) – Segmented

ответ

4

«Строка» в C - это всего лишь множество символов. Сравнение двух массивов с == просто сравнивает их адреса, которые различны для разных массивов. (Литералы могут быть или не быть одинаковыми, фактически, в зависимости от реализации.)

+0

Я не думаю, что строка в c является просто массивом символов: char char [] = {'a', 'b', 'c', 'd', 'e'}; 'string ? –

+0

Ну, это плохо сформированная строка ;-). Предположим, что то, что я сказал, является истинным утверждением о строках C; есть еще. –

+0

Да, есть больше, хорошая точка. –

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