{% markmap %}
第13章 字符串
字符串字面量
字符串变量
- 首先区分一下这两个
int a[] = "123456";
int *a = "123456";
- 很显然,上面一个是字符串数组,下面是字符串指针,但是二者大不相同
- 字符串数组初始化的时候,是从字符串常量那里一个一个拷贝到字符串数组空间中,因此,字符串数组它所在的空间是可以修改的内存空间。
- 而字符串指针指向的是常量区,常量区是不可以修改的,因此想要通过字符串指针修改值是不允许的。
- 还有字符数组是个常量指针,是不可以修改其指向其他地址的,而字符指针是可以修改的。
字符串的读和写
- 写字符串
printf
- 转换说明%s允许printf函数写字符串。
puts
- 更方便
- 读字符串
scanf
- 转换说明%s允许scanf函数把字符串读入字符数组
gets
fgets
- gets函数天生就是不安全的,fgets函数则是一种好得多的选择。
访问字符串的字符
- 数组或者指针都可以
C语言的字符串库<string.h>
strcpy
- 字符串复制
strlen
- strlen函数返回字符串s的长度:s中第一个空字符之前的字符个数(不包括空字符)
- strlen和sizeof的区别
- strlen不包括空字符,sizeof包括空字符
- 新节点
- strlen不包括空字符,sizeof包括空字符
strcat
- 字符串拼接
strcmp
- 字符串比较
- 新节点
- 字符串比较
字符串数组
- 区分这两种写法
char planets[][8] = {"Mercury", "Venus", "Earth","Mars", "Jupiter", "Saturn","Uranus", "Neptune", "Pluto"};
char *planets[] = {"Mercury", "Venus", "Earth","Mars", "Jupiter", "Saturn","Uranus", "Neptune", "Pluto"};
- 虽然看上去差不多,但是内存当中却完全不一样