strncmp与n太大会产生奇怪的输出

时间:2018-05-03 09:53:51

标签: c strncmp

我有两个要比较的字符串,我认为使用strncmp会比使用strcmp更好,因为我知道其中一个字符串的长度。

char * a = "hel";
char * b = "he"; // in my real code this is scanned so it user dependent
for(size_t i = 0; i < 5; i++){
    printf("strncmp: %d\n", strncmp(a,b,i));
}

我预计输出为

0
0
0
1   // which is the output of printf("strcmp: %d\n", strncmp(a,b));
1

因为仅在第4次迭代(i = 3)中字符串开始不同,而是我得到了

0
0
0
108  // guessing this is due to 'l' == 108 in ascii
108

我不明白为什么,正如男人所说:

  

strcmp()函数比较两个字符串s1和s2。如果找到s1,则返回小于,等于或大于零的整数,小于,匹配或大于s2。

     

strncmp()函数类似,只是它只比较了s1和s2的第一个(最多)n个字节。

这意味着它应该在到达'\0'之后停止,因此只返回1(如strcmp),不会吗?

1 个答案:

答案 0 :(得分:7)

根据您发布的报价:

  

...返回小于,等于或大于零的整数...

1108都是大于0的整数。无法保证函数必须返回1-1