Я сравниваю две строки с 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
Это зависит от того, как функция strrev
определяется, если он отменяет аргумент на месте, то результат ожидается, потому что tc был обратным.
Например, функция strrev
можно объявить следующим образом
char * strrev( char *s );
и возвращаемое значение и значение аргумента будут равны.
Принять во внимание, что strrev
не является стандартной функцией.
Если вы измените свой код следующим образом:
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 печатается дважды.