if(strncmp(buf, buf2, 7) == 0)
做与
相同的事情if(memcmp(buf, buf2, 7) == 0)
buf
和buf2
是char *数组或类似的。
我打算将这个问题附加到另一个问题上,但后来又决定将它单独发布更好。据推测,答案要么是一个微不足道的“是”,要么就是没有,那么差异是什么?
(我从在线文档中找到了这些函数,但对strncmp
不确定,因为文档略显不清楚。)
答案 0 :(得分:2)
与strcmp()
类似,strncmp()
用于比较字符串,因此当它在至少一个参数中找到字符串终结符时,它会停止比较。超过该点的任何差异都不会对结果产生影响。 strncmp()
的不同之处在于,如果在此之前没有遇到终结符,它也会在指定的字节数后停止比较。
memcmp()
用于比较随机存储器块。它会比较每个块的指定字节数,直到找到差异,而不管字节的值如何。也就是说,它不会停留在字符串终结符处。
答案 1 :(得分:1)
在C和C ++中,字符串的结尾由值为0的字节指示。
函数memcmp
不关心strig的结束,但在任何情况下都会精确地比较指定的字节数。
与此相反,函数strncmp
将停在一个值为0的字节,即使尚未达到要比较的传递字节数。
答案 2 :(得分:0)
strncmp()
和memcmp()
之间的主要区别在于,第一个是明智的到(停止 at)'\0'
最新的不是。如果buf
和buf2
的前7个字节的内存中不包含'\0'
,那么行为是相同的。
考虑以下示例:
#include <stdio.h>
#include <string.h>
int main(void) {
char buf[] = "123\0 12";
char buf2[] = "123\0 34";
printf("strncmp(): %d\n", strncmp(buf, buf2, 7));
printf("memcmp(): %d\n", memcmp(buf, buf2, 7));
return 0;
}
将输出:
strncmp(): 0
memcmp(): -2
由于strncmp()
将停留在buf[3]
,因此它会找到'\0'
,其中memcmp()
将继续,直到比较所有7个字节。