strcmp :全称 string compare(字符串比较)
1. 主角登场strcmp是什么strcmp的全称是string compare字符串比较。它的任务很简单就是像查字典一样比较两个字符串谁“大”谁“小”。核心规则记住这个就行它从左到右一个字符一个字符地比比的是字符的 ASCII 码值。如果两个字符串一模一样返回0。如果字符串1 比 字符串2 “大”返回正数( 0)。如果字符串1 比 字符串2 “小”返回负数( 0)。通俗类比想象你在比两个单词 apple 和 banana。你从第一个字母开始看a 和 b。因为在字母表里 a 在 b 前面所以 apple 比 banana 小。strcmp(apple, banana)就会返回一个负数。2. 实战它在哪出现我们在上一讲qsort排序结构体时就用到过它假设我们要按学生的姓名排序姓名是字符串char name[20]我们不能直接做减法name1 - name2是错的这时候就得请strcmp出马。#include string.h strcmp 的头文件 struct Stu { char name[20]; int age; }; 按名字排序的比较函数 int cmp_stu_by_name(const void* e1, const void* e2) { 1. 先把 void* 强转成 struct Stu* 2. 取出 name 成员它本身就是 char* 类型 3. 交给 strcmp 去比较 return strcmp(((struct Stu*)e1)-name, ((struct Stu*)e2)-name); }看strcmp帮我们省去了手写循环去逐个比较字符的麻烦非常省心。3. 避坑指南千万别用比字符串这是新手最容易犯的错char str1[] hello; char str2[] hello; if (str1 str2) { ... } ❌ 错误 if (strcmp(str1, str2) 0) { ... } ✅ 正确为什么str1 str2比较的是两个数组的首地址。这两个数组在内存里是不同的两块地盘地址肯定不一样所以结果永远是假。strcmp(str1, str2)比较的是两个地址里存放的内容。内容都是 hello所以返回 0表示相等。总结一下strcmp它是 C 语言里专门用来比较字符串内容的函数。记住它的返回值规则0、正数、负数并且永远不要用来比较两个字符串的内容。