我已经厌倦了以这种方式比较字符串:
if(strcmp(buf, "AUTHENTICATE") != 0) {
我的缓冲区中包含“AUTHENTICATE”字符串,您可以在调试器检查器上看到。但结果是strcmp返回的值不等于0.为什么?
答案 0 :(得分:2)
正如提醒一样,
strcmp
应该比较2个字符串,字符为 字符,并在2个字符不同时返回。在这种情况下,函数返回 第一个的ASCII值与ASCII的ASCII值之间的差异 第二个。如果满足\0
字符,则它是最后一次评估 函数返回前字符串的字符。
我看到strcmp
当你希望它返回0时,buf
将返回另一个值的两个可能原因。
\n
是用户输入,则它可能包含结尾buf
,字符串文字“AUTHENTICATE”不包含该结尾。 这取决于你如何处理输入:你使用什么功能,你把整个输入存储到buf
等等...... buf
不包含nul终结符。请注意,在这种情况下,strcmp
不是有效字符串。请注意\0
将继续评估两个字符串,直到找到buf
字符,这意味着如果strcmp
不包含字符,buf
将继续在内存中读取<!-- File 1 header.php -->
<img src=".."/>
<nav>
<ul>
<li>
</ul>
</nav>
中包含的最后一个字符已被评估,您当然不需要。