Я имею понимание странное поведение strcmp
функции, которая будет проиллюстрировано следующим кодом:STRCMP не ведет себя так, как и ожидалось, возвращает 0 при сравнении двух неравных строк
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char *p = "no";
cout << p << endl; //Output: no
cout << &p << endl; //Output: 0x28ac64
cout << strlen(p) << endl; //Output: 2
cout << strcmp(p, "no") << endl; //Output: 0
cin >> p; //Input: bo
cout << p << endl; //Output: bo
cout << &p << endl; //Output: 0x28ac64
cout << strlen(p) << endl; //Output: 2
cout << strcmp(p, "no") << endl; //Output: 0
return 0;
}
То, что я не понимаю, почему вывод строки 15 равен 0. 0 означает, что две строки равны, что явно не так. Что мне здесь не хватает?
P.S. Я извиняюсь за escape-символы в заголовках, но я не смог отобразить iostream, если я удалю его. Хотя я публикую это, я выясню, как правильно это сделать в следующий раз. :)
'cin >> p;' - Здесь мы идем снова. – chris
Кстати, есть это действительно полезное предупреждение, доступное в GCC: 'warning: debrecated conversion from string constant to 'char *' [-Wwrite-stringings]' – chris
@chris, если OP компилирует это с помощью gcc – Slava