字符串函数strcmp
函数格式:int strcmp(const char *s1, const char *s2);
头文件:string.h
返回值规则与qsort一致:
返回值<0:s1 <s2 (按字典序,s1排在s2前面)
返回值=0:两个字符串相等
返回值>0:s1 >s2(按字典序,s1排在s2后面)
比较规则:按字典序(ASCII码顺序)逐个字符比较,遇到第一个不同字符就决定大小。
相关函数:
strncmp(s1,s2,n):只比较前n个字符
strcasecmp()(非标准):忽略大小写比较
字符串函数strlen
返回类型是无符号整数,size_t
参数可以是指针,也可以直接是字符串字面量。(会退化为指针)(字符串字面量必须用双引号)
| 对比维度 | sizeof(单目操作符) | strlen |
| 本质 | 运算符 | 函数需要头文件string.h |
| 计算时机 | 编译时 | 运行时 |
| 参数 | 任何类型(指针,数组,变量,类型名) | 只能是char*(字符串指针) |
| 计算结果 | 占用内存的字节数 | 字符串长度(不包括结尾的/0) |
| 对指针 | 返回指针本身大小(8字节64位系统) | 从指针指向位置开始,找/0为止 |
| 特点 | 不关注内存放的数据 | 关注内存中是否有\0,如果没有找到\0,就会继续往后找,可能会越界 |
对于字符数组和字符串的使用:
| 对比项 | 字符数组 | 字符串 |
| 语法 | char arr[] = {'k', 'a', 'w'}; | char str= "abcd"; |
| 自动添加\0 | ❌不会 | ✅会自动添加 |
| 数组长度 | 正好是花括号里的元素个数 | 字符串长度+1( 多一个\0) |
| 能否安全用于strlen | ❌不能 | ✅能 |