What is the difference between memcmp, strcmp and strncmp in C?
在C语言中,memcmp、strcmp 和 strncmp 都是用于比较两个字符串或内存区域的函数,但它们各有特点和适用场景。1. memcmp 函数memcmp 函数用于比较内存区域,它并不专门用于比较字符串。它比较的是两个指定的内存区域的前N个字节。memcmp 的原型如下:int memcmp(const void *s1, const void *s2, size_t n);参数:s1:指向第一个内存块的指针。s2:指向第二个内存块的指针。n:要比较的字节数。返回值:如果 s1 和 s2 相等,则返回0。如果 s1 小于 s2,则返回负值。如果 s1 大于 s2,则返回正值。2. strcmp 函数strcmp 函数专门用于比较两个C字符串,比较时会一直比较到字符串的终止符 \0。strcmp 的原型如下:int strcmp(const char *s1, const char *s2);参数:s1 和 s2 是指向要比较的两个字符串的指针。返回值:如果 s1 与 s2 字符串相等,返回0。如果在字典顺序中 s1 小于 s2,返回负值。如果 s1 大于 s2,返回正值。3. strncmp 函数strncmp 与 strcmp 类似,但它只比较字符串的前n个字符。它通常用于防止缓冲区溢出的情况。strncmp 的原型如下:int strncmp(const char *s1, const char *s2, size_t n);参数:s1 和 s2 是指向要比较的两个字符串的指针。n 是要比较的最大字符数。返回值:如果 s1 和 s2 在前n个字符中相等,则返回0。如果在字典顺序中 s1 在前n个字符中小于 s2,返回负值。如果 s1 在前n个字符中大于 s2,返回正值。使用场景和例子假设有以下场景:char arr1[10] = "abc";char arr2[10] = "abk";// 使用 memcmp 比较前3个字符int res1 = memcmp(arr1, arr2, 3); // 结果为 0,因为前3个字符完全相同// 使用 strcmp 比较字符串int res2 = strcmp(arr1, arr2); // 结果为负值,因为 'c' < 'k'// 使用 strncmp 比较前2个字符int res3 = strncmp(arr1, arr2, 2); // 结果为 0,因为前2个字符 "ab" 完全相同总结使用 memcmp 当你需要比较任意类型的内存区域。使用 strcmp 当你需要比较两个完整的字符串。使用 strncmp 当你需要比较两个字符串的前n个字符,特别是当字符串可能没有以 null 结尾时或为了避免溢出风险。