char*与std string错误结果进行比较

use*_*977 0 c++ linux

情况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 //不正确!

谁知道什么是错的?谢谢!

Dav*_*nan 7

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并更正您对如何解释返回值的理解.