我有2个字符串要比较,我认为使用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
和108
都是大于0的整数。不能保证函数必须返回1
或-1
。