Appearance
字符数组
C 语言其实没有字符串, 所有的字符串功能实际上使用的是字符数组
字符串
字符串
- 由双引号包括
- 末尾隐藏特殊字符
\0
初始化
char str[] = {'a', 'b', 'c', '\0'}这里可以指定长度为4, 但不添加的话, 编译器也会自动帮你添加char *str = "abc"因为字符串本身就是字符数组, 字符串变量有 C语言数组 的特征, 变量实际上指向数组头元素位置, 但是同样和数组一样, 不能作为右值, 由于指针指向常量池地址, 其内容是不能改变的.char str[6] = "Hello"这相当于把常量区的 "Hello" 字符串, 拷贝到str[6]的变量里;- 初始化输入的值少于声明空间, 会用
\0填充
输入和输出
char *gets(char *s);
- gets 只能读入一个字符串, 而 scanf 可以多个
- gets 可以输入空格等而不影响
int puts(const char *s);
- 相较于 printf 只能输出一个字符串
- 自动换行
string.h
size_t strlen(const char *s);
- 功能:求出给定字符串的实际长度,不包含字符串的结束标志
'\0' - 参数:要求的字符串的起始地址
- 返回值:
size_t,系统封装的一个非负整数类型
nt strcmp(const char *s1, const char *s2);
功能:比较两个字符串的大小,由返回值来决定谁大谁小
参数:要比较的两个字符串的首地址
返回值:整形数据,可正、可赋、可0
0:表明s1大于s2
<0:表明s1小于s2
=0:一样大
注意:不能使用关系运算符直接对字符串进行运算
原理:逐个比较两个字符串中对应位置上的ascii值,返回值就是,出现对应位置上不相等的字符的ascii值的差
char *strcpy(char *dest, const char *src);
- 功能:实现将第二个字符串,拷贝到第一个字符数组中
- 参数:
- @dest存储拷贝后的字符串,必须是个容器
- @src要拷贝的字符串
- 返回值:成功拷贝的第一个字符串的地址
注意:不能使用赋值运算符完成两个字符串的赋值,只能使用该函数完成。( 因为数组是左值 )
第一个字符数组必须是容器,而且要足够大,以便容纳src中所有内容,拷贝时,连同'\0'一块拷贝给第一个字符数组
第二个字符串,可以是字符数组的形式,也可以是字符串常量的形式
结果:第一个字符串变成第二个字符串,第二个字符串内容不变
char *strcat(char *dest, const char *src);
- 功能:将src字符串,连接到dest字符串后面,将结果放入dest中
- 参数:
- @dest:连接前的前面的字符串,也是连接后保存结果的字符串
- @src:要被连接的字符串
- 返回值:连接后的第一个字符串
注意:要求第一个字符数组要足够大,以便容纳连接后的结果
在连接过程中,会将第一个字符串的'\0'取消,连接后,第二个'\0'保存
结果:第一个字符串变长,第二个字符串不变