我尝试用原生C实现自己的strncmp,然后我开始做一些像这样的测试
#include <string.h> #include <stdio.h> printf("%d\n", strncmp("test\200", "test\0", 6));
而strncmp在这个特定情况下的返回值是1;谁能解释一下为什么?我很确定这是因为\200超过了默认的ASCII码,然后我实现了一个条件,如果字符不在0和127之间,我将返回1,对吗?
ef1yzkbh1#
每个手册页:(2)如果一个字符串的大小为1,则该字符串的大小为1;...strcmp()返回一个指示比较结果得整数,如下所示:· 0,如果s1和s2相等;·如果s1小于s2,则为负值;·如果s1大于s2,则为正值。否则该数值未定义。这意味着\200大于\0(字符串结尾),更简洁地写为:
\200
\0
#include <stdio.h> #include <string.h> int main(void) { printf("%d\n", strncmp("\200", "", 1)); return 0; }
1条答案
按热度按时间ef1yzkbh1#
每个手册页:
(2)如果一个字符串的大小为1,则该字符串的大小为1;
...
strcmp()返回一个指示比较结果得整数,如下所示:
· 0,如果s1和s2相等;
·如果s1小于s2,则为负值;
·如果s1大于s2,则为正值。
否则该数值未定义。
这意味着
\200
大于\0
(字符串结尾),更简洁地写为: