“C语言部分-Day06”
一、字符串
1.1 字符串的字面量
字符串的字面量概念:
- 是用双引号括起来的字符序列,如
“I love you”
,编译器会自动合并两个相邻的字符串(相邻:仅以空白分割)。
- 它是个常量,不能修改
字符串字面量是如何存储的?
- 如字符串”abc”,它会用4个字节存储,存储方式是:a b c \0
- 最后一个’\0’代表空字符” “
- 字面量实际可以理解为
const char *
类型,无法修改
1.2 字符串变量
C语言是没有字符串类型的,都是依赖字符数组
来实现,如
1.3 字符串的初始化
字符串的初始化分为两种方式:
这两种方式使用区别的案例:
1.4 读写字符串
1.4.1 写字符串(打印)
打印字符串有两种方式:%s
和puts()
,它们的区别如下
1.4.2 读字符串(输入)
输入字符串有三种方式:scanf()
和gets()
和get_s()
:
方法一:scanf() 【不推荐】
- 会跳过前面的空白字符,然后读取字符存入数组,直到再次遇到空白字符为止,最后添加’\0’
- 永远不会包含空白字符
- scanf不会检测数组越界
方法二:gets() 【推荐】
- 不跳过前面的空白字符,一直读取字符存入数组,直到遇到换行符为止,最后添加’\0’
- gets不会检查数组是否越界
**
方法三:gets_s() 【推荐】
- 不跳过前面的空白字符,一直读取字符存入数组,直到遇到换行符为止,最后添加’\0’
- gets_s会检查数组是否越界,较为安全
- 但是存在兼容性问题,使用需注意
1.5 字符串的库函数
1.5.1 计算字符串的长度strlen
返回值:
1.5.2 比较两个字符串strcmp
返回值:
1.5.3 字符串复制
1.5.3.1 普通复制strcpy
参数:
返回值:
- 该函数返回一个指向最终的目标字符串 dest 的指针
1.5.3.2 更安全的复制strncpy
参数:
返回值:
strncpy的安全拷贝策略:
1.5.4 字符串拼接
1.5.4.1 普通拼接strcat
参数:
返回值:
注意事项:
需注意字符串的长度,以上案例中,如s1的数组长度为10,则在编译时会报错,因为拼接完的字符串最后还会加上’\0’,因此需要多留一个长度
1.5.4.2 更安全的拼接strncat
参数:
- char * dest:目的字符串
- const char * src:源字符串
- size_t count :拷贝的字符数
返回值:
strncat的安全拼接策略:
因为strncat总会写入’\0’填充,所以我们一般会这样调用:
1.6 字符串的惯用法(TODO 例子不能跑)
1、搜索字符串的末尾(编译错误)
2、赋值字符串,包括空字符(编译错误)
1.7 字符串数组
如何表示字符串数组?
1、二维数组方式 【不推荐,空白空间很多】
2、字符指针数组 【推荐】
1.8 练习
1、编写自己的strlen函数
2、编写自己的strcat函数