C中的字符串比较缓冲区1对字符串文字

时间:2017-06-19 14:29:01

标签: c string comparison

我已经厌倦了以这种方式比较字符串:

 if(strcmp(buf, "AUTHENTICATE") != 0) {

我的缓冲区中包含“AUTHENTICATE”字符串,您可以在调试器检查器上看到。但结果是strcmp返回的值不等于0.为什么? enter image description here

1 个答案:

答案 0 :(得分:2)

  

正如提醒一样,strcmp应该比较2个字符串,字符为   字符,并在2个字符不同时返回。在这种情况下,函数返回   第一个的ASCII值与ASCII的ASCII值之间的差异   第二个。如果满足\0字符,则它是最后一次评估   函数返回前字符串的字符。

我看到strcmp当你希望它返回0时,buf将返回另一个值的两个可能原因。

  1. 如果您的\n是用户输入,则它可能包含结尾buf,字符串文字“AUTHENTICATE”不包含该结尾。 这取决于你如何处理输入:你使用什么功能,你把整个输入存储到buf等等......
  2. 您的buf不包含nul终结符。请注意,在这种情况下,strcmp不是有效字符串。请注意\0将继续评估两个字符串,直到找到buf字符,这意味着如果strcmp不包含字符,buf将继续在内存中读取<!-- File 1 header.php --> <img src=".."/> <nav> <ul> <li> </ul> </nav>中包含的最后一个字符已被评估,您当然不需要。