情况1:
std::string dd = "5A"
char checkSum[9]
checkSum[0] = '5';
checkSum[1] = 'A';
if(strcmp(dd.c_str(),checkSum) == 1){
return 1;
}
else {return 0;}
Run Code Online (Sandbox Code Playgroud)
结果:返回1 //正确!
案例2:
std::string dd = "0A"
char checkSum[9];
checkSum[0] = '5';
checkSum[1] = 'A';
if(strcmp(dd.c_str(),checkSum) == 1){
return 1;
}
else {return 0;}
Run Code Online (Sandbox Code Playgroud)
结果:返回0 //正确!
案例3:
std::string dd = "5A"
char checkSum[9]
checkSum[0] = '0';
checkSum[1] = 'A';
if(strcmp(dd.c_str(),checkSum) == 1){
return 1;
}
else {return 0;}
Run Code Online (Sandbox Code Playgroud)
结果:返回1 //不正确!
谁知道什么是错的?谢谢!
strcmp需要两个以null结尾的字符串,但是您没有添加空终止符checkSum.
这就是案例1返回的原因1,实际上它应该返回0.请注意,您的预期值不正确.在情况1中,一旦添加了null终止符,两个字符串应该相等.所以strcmp会返回0,你的代码也应该返回0.
对于案例2,strcmp("0A", "5A")返回负值'0'<'5',因此您的代码应该返回0.
对于案例3,strcmp("5A", "0A")返回一个正值,恰好正值是1你错误地通过平等测试的.
在所有情况下,测试值1都是不正确的,因为strcmp从未承诺返回1.它承诺返回:
0表示两个字符串相等,或者,str1比较大于str2,或str1比较小于str2.strcmp因此==0,对返回值的唯一有效比较是,>0或<0.
您需要重新访问文档strcmp并更正您对如何解释返回值的理解.
| 归档时间: |
|
| 查看次数: |
1276 次 |
| 最近记录: |