сравнить строки с функцией strcmp работает по-разному

Я сравниваю две строки с strcmp следующим образом:

long t=1011;
char tc[10], tcr[10];
ltoa(t,tc,10);
cout<<tc<<endl;  //prints 1011
strcpy(tcr, strrev(tc));
cout<<tcr<<endl; //prints 1101
cout<<strcmp(tc,tcr);

Это дает мне результат 0, который указывает, что строки равны. Тем не менее, когда я пытаюсь:

cout<<strcmp("1011", "1101"); // prints -1 thats okay

Я получаю ожидаемое значение -1. Что я делаю не так? Я использую компилятор devc ++ версии 4.9.9.2

-3

Решение

Это зависит от того, как функция strrev определяется, если он отменяет аргумент на месте, то результат ожидается, потому что tc был обратным.

Например, функция strrev можно объявить следующим образом

char * strrev( char *s );

и возвращаемое значение и значение аргумента будут равны.

Принять во внимание, что strrev не является стандартной функцией.

2

Другие решения

Если вы измените свой код следующим образом:

long t=1011;
char tc[10], tcr[10];
ltoa(t,tc,10);
strcpy(tcr, strrev(tc));
cout<<tc<<endl;
cout<<tcr<<endl;
cout<<strcmp(tc,tcr);

тогда вы увидите, что tc и tcr одинаковы. strrev переворачивает входную строку на месте, и 1101 печатается дважды.

0

По вопросам рекламы [email protected]