我用 C 编写了一小段代码来测试strncmp()
功能memcmp()
。这是代码。
#include <stdio.h>
#include <string.h>
int main()
{
const char s1[] = "abcd\0\0\0\0";
const char s2[] = "abcd\0abc";
printf("strncmp(s1, s2, 4) = %d\n", strncmp(s1, s2, 5)); //0
printf("strncmp(s1, s2, 8) = %d\n", strncmp(s1, s2, 8)); // why returns 0? Thx
printf("memcmp(s1, s2, 4) = %d\n", memcmp(s1, s2, 5)); // 0
printf("memcmp(s1, s2, 8) = %d\n", memcmp(s1, s2, 8)); // -120
return 0;
}
我发现strncmp(s1, s2, 8) = 0
同时memcmp(s1, s2, 8) = -97
. 因为\0
不等于a
,我认为strncmp(s1, s2, 8)
应该返回一个非零值。
然后我尝试打印s1
和s2
长度,它们都是 9。我尝试测试更多案例,strncmp()
按预期工作。
s1
最后,我尝试了与and类似的情况s2
,strncmp
返回错误值。以下是我的代码:
#include <stdio.h>
#include <string.h>
int main()
{
const char s1[] = "abcd\0\0\0\0";
const char s2[] = "abcd\0xyz";
printf("strncmp(s1, s2, 4) = %d\n", strncmp(s1, s2, 5)); //0
printf("strncmp(s1, s2, 8) = %d\n", strncmp(s1, s2, 8)); // why returns 0? Thx
printf("memcmp(s1, s2, 4) = %d\n", memcmp(s1, s2, 5)); // 0
printf("memcmp(s1, s2, 8) = %d\n", memcmp(s1, s2, 8)); // -120
printf("sizeof(s1) = %lu\n", sizeof(s1)); // 9
printf("sizeof(s2) = %lu\n", sizeof(s2)); // 9
printf("%d\n", strncmp("\0", "a", 1)); // -1
printf("%d\n", strncmp("\0\0", "ab", 2)); // -1
printf("%d\n", strncmp("a\0", "ab", 2)); // -1
printf("%d\n", strncmp("a\0\0", "a\0b", 3)); // 0, why?
return 0;
}
我想也许strncmp()
在它相遇之后不会比较字符\0
?不就是这样吗strcmp
。我不确定它是否strncmp()
像strcmp()
.