比较字符串与strcmp函数的工作方式不同

时间:2014-06-05 18:01:04

标签: c++ strcmp string.h

我用以下方式将两个字符串与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

2 个答案:

答案 0 :(得分:2)

这取决于函数strrev的定义方式,如果它反转了参数,那么结果是预期的,因为tc被反转了。

例如,函数strrev可以通过以下方式声明

char * strrev( char *s );

并且参数的返回值和值将相等。

考虑到strrev不是标准功能。

答案 1 :(得分: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两次。