//炬火不止,前进不息

如何理解C标准库中memcmp函数

分类在 全部计算机 0 评论

函数原型为:

Int memcmp(const void *lhs, const void *rhs, size_t count);

memcmp函数是C标准库中用于比较两个内存区域的函数。它将两个内存区域的内容逐个字节进行比较,直到发现不同的字节或者比较完全部字节为止。
memcmp按照按照字节比较,参照ASCII码比较大小。
如果两个内存区域相等,函数返回0;否则,在相异的首对字节中,如果 lhs 小于 rhs 返回值 < 0;如果 lhs > rhs,则返回值>0。
(不同编译器,非零返回值可能会有不同的结果,在 Linux GCC 下,返回的第一个不同字节的差值(即lhs[i]-rhs[i],Windows Mingw 下返回值是只能是-1,0,1)

其中,lhs和rhs分别是要比较的内存区域的起始地址,count是要比较的字节数。函数比较的是lhs和rhs的前count个字节,如果count为0,则函数总是返回0。函数会根据指针的类型自动转换为char类型指针。

memcmp函数常用于比较字符串或结构体等数据结构,可以判断它们是否相等。由于比较的是字节,函数可以用于比较任何类型的数据结构。

比如,我们有两个字符串:

char str1[] = "hello";
char str2[] = "Hello";

如果我们想要比较这两个字符串是否相等,我们可以使用memcmp函数来进行比较:

int result = memcmp(str1, str2, 5);

这里,memcmp函数的第一个参数是要比较的第一个字符串,第二个参数是要比较的第二个字符串,第三个参数是要比较的字符数。

在这个例子中,我们比较了str1和str2这两个字符串的前5个字符。由于这两个字符串不相等,因此result的值为一个非零值,表示这两个字符串不相等。

Linux GCC 返回了32,即 'h'-'H' = 32,Windows Mingw 返回了 1

留言