gcc C strncmp返回1

xtupzzrd  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(130)

我尝试用原生C实现自己的strncmp,然后我开始做一些像这样的测试

#include <string.h>
#include <stdio.h>

printf("%d\n", strncmp("test\200", "test\0", 6));

而strncmp在这个特定情况下的返回值是1;谁能解释一下为什么?
我很确定这是因为\200超过了默认的ASCII码,然后我实现了一个条件,如果字符不在0和127之间,我将返回1,对吗?

ef1yzkbh

ef1yzkbh1#

每个手册页:
(2)如果一个字符串的大小为1,则该字符串的大小为1;
...
strcmp()返回一个指示比较结果得整数,如下所示:
· 0,如果s1和s2相等;
·如果s1小于s2,则为负值;
·如果s1大于s2,则为正值。
否则该数值未定义。
这意味着\200大于\0(字符串结尾),更简洁地写为:

#include <stdio.h>
#include <string.h>

int main(void) {
    printf("%d\n", strncmp("\200", "", 1));
    return 0;
}

相关问题