Проблема с оператором if в C под LinuxLinux

Ответить
Anonymous
 Проблема с оператором if в C под Linux

Сообщение Anonymous »

У меня странная проблема с C на платформе Linux, я использовал компилятор GCC.
Вот код

Код: Выделить всё

if((strcmp(uk[c],address[c][i]) == 0) || (strcmp(ck[c],address[c][i]) == 0)){
printf("\n\tFound %s %s %s and %s %d %d\n\n",pa[c],ck[c],uk[c],address[c][i],strcmp(uk[c],address[c][i]),strcmp(ck[c],address[c][i]));
}
Согласно логике, условие if будет истинным, если ck[c] или uk[c] равно адресу[c]. Но в приведенном выше коде даже условие не удалось, оно попало в оператор печати. Это меня очень удивило.
Я получил такой результат:

Код: Выделить всё

Not found 5EcUxXrRd3rdBECEDCWTU4GwxGSovT8jui
Found 100a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a64646464646464640a0a0a0e1cdd4b 1MHA729tYMwnZCLbGKuxhQqgbhfgVXkGkd 2AVzb6wVBMsduUNxz4ULTUaiypZdSCfPTi and 1MNSxdpJmc5oM76rSt77fvS71zQf6dCrSL -12 -6
Not found 3NqujfqHmTi53f9eLFmbe8rR3rqpNT39Yj
Здесь strcmp возвращает -12 и -6, но на самом деле это сравнивает 1MHA729tYMwnZCLbGKuxhQqgbhugVXkGkd и 1AVzb6wVBMsduUNxz4ULTUaiypZdSCfPTi с 1MNSxdpJmc5oM76rSt77fvS71zQj6dCrSL. Если какое-либо из условий истинно, оператор печати будет печататься, но в моем случае он печатается, даже если он неверен. Я заметил одну общую черту, если первые символы совпадают с введенными.
В чем тут подвох?

Подробнее здесь: https://stackoverflow.com/questions/792 ... nder-linux
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»