-3

次の方法で、2 つの文字列を 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 を使用しています

4

2 に答える 2

2

関数strrevがどのように定義されているかによって異なります。引数をその場で逆にすると、tc が逆になっているため、結果が期待されます。

たとえば、関数strrevは次のように宣言できます

char * strrev( char *s );

戻り値と引数の値は等しくなります。

strrev標準機能ではないことを考慮してください。

于 2014-06-05T18:09:04.790 に答える
0

コードを次のように変更した場合:

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 が 2 回出力されます。

于 2014-06-05T18:12:22.613 に答える