2013-02-08 3 views
0

У меня возникли проблемы с сравнением двух строк в C, чтобы убедиться, что они равны.Как сравнить строки в C для условия

switch(i) { 
case 1: 
    printf("Got in case 1. TextA=%s word=%s \n",TextA,word); 
    if(TextA == word) {  
    SubTypeOption = 1; 
    printf("SubTypeOptioon = %d",SubTypeOption); 
    } 

На моем выходе я получаю "Got в случае 1. TextA = SupTypeA слово = SupTypeA SubTypeOption = 0" // Так что не было изменено каким-то образом

+0

Функция strcmp() – Arpit

+0

Спасибо, все работает. – user2055216

ответ

6

== оператор сравнивает указатели. Это удается только тогда, когда два char* указывают на тот же адрес в памяти. Сравнение строк содержания в C требуется вызов strcmp или strncmp:

if (strcmp(TextA, word) == 0) { 
    // Strings are identical 
} 

Примечания сравнения с нулем: требуется, поскольку strcmp функции сравнения строк лексикографически, возвращающихся к нулю, когда строки равны. Для того, чтобы использовать strcmp, необходимо указать <strings.h>.

1

Вы не можете сравнивать строки, используя символ ==, потому что вы сравниваете, размещены ли они в том же месте памяти или нет. TextA и word являются указателями на первый символ каждой строки c.

strcmp() или strlcmp() функции для сравнения строк. Они возвращают 0, если две строки равны

#define STREQ(a,b) (strcmp((a),(b))==0) 
if (STREQ(TextA, word)){ 

} 
1

Простой - использование strcmp - это функция, которая вам нужна.

1

Вы не можете сравнить содержимое строк (или любой другой тип массива) со стандартными реляционными операторами как ==, <, > и т.д. Вам нужно будет использовать функцию strcmp библиотеки вместо :

#include <string.h> 
... 
if (strcmp(TextA, word) == 0) 
{ 
    // strings are equal 
} 

strcmp будет возвращать целое значение 0, если < TextA является lexicogra физически меньше word, 0, если они лексикографически равны, и> 0, если TextA лексикографически больше word.

Обратите внимание, что в локали C это означает, что строки будут упорядочены «ASCIIbetically»; то есть любая строка, начинающаяся с 'a', появится после строки, начинающейся с 'Z', поскольку код ASCII для 'a' больше 'Z'.

Почему вы не можете использовать == для сравнения строк?

исключения случаев, когда это операнд sizeof, _Alignof или одинарных & операторов, или является строкой символов используются для инициализации массива в объявлении, выражение типа «N-элементе массив T» будет преобразуется в выражение типа «указатель на T», а его значение будет адресом первого элемента массива.

Это означает, что в условии TextA == word оба выражения TextA и word преобразуются в значения указателя; вместо сравнения содержимого двух массивов мы сравниваем их адреса.

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