字符数组
char word[] = {'H','e','l','l','o'};
字符串
char word[] = {'H','e','l','l','o','\0'};
char word[] = {'H','e','l','l','o',0};
当然它还是个字符数组
字符串
- 以0结尾的一串字符
- 0标志字符串的结束, 但它不是字符串的一部分
- 也就是计算字符串长度的时候不包含这个0
- 字符串以数组的形式存在, 以数组或指针的形式访问
- 更多的是以指针的形式
#include <string.h>
里有很多处理字符串的函数
字符串常量 用""框住的就是字符串常量 c语言会自动把两对相连的引号合并起来
定义字符串变量
1️⃣ char *str="Hello";
- s是指针, 指向一个字符串常量, 在一个很小的地方 所以”只读”不能修改
那么这个可以用在什么情况呢?
- 当字符串作为参数传入时, 因为本来传入就是以指针的方式传入的
这里我思考了半天, 被传入的是很大的地方的, 传进去当然是很大的地方的啦, 跟定义的时候的很小的地方没关系 - 动态分配空间, malloc拿到的是大地址
总之定义的时候地址不对, 其他只要地址对就没问题 不是说char*是个字符串
2️⃣ char world[]="Hello";
3️⃣ char line[10]="Hello";
- 这是可以修改的, 指向一个很大的地方 实际上是计算机帮你做了一件事, 把这个很小的地方的东西复制过来了
所以我们知道, 字符串暂时没有深拷贝, 就像数组一样(本来就是数组) 所以就要提到后面的 字符串函数
字符串的输入输出
scanf()
篇
- 空格, tab, 换行 作为分隔
- 如果
%7s
就表示收7个字符- 小于7的当没事发生
- 大于7的就停了, 留给下一个scanf
缓存?