认识字符串

字符数组

image.png

字符串

image.png
字符串结尾要加’\0’
**word[]既是字符串,又是字符数组

image.png
\0表示字符串的结束,但它不是字符串的一部分。
image.png
不能用运算符对字符串做运算
**通过数组的方式可以遍历字符串

字符串变量

image.png

字符串常量

image.png
image.png两个相邻的字符串常量会自动连接
image.png使用\连接两句话
image.png

字符串变量

image.png
int型变量i和字符串变量s不在一个地方(地址不同)
image.png
字符串变量s位于代码段,只读,不能写
image.png
如果要修改字符串,使用数组来存放字符串
字符串的指针是指向一片只读区域
image.png
数组S3[]和int变量地址相似,可以对它进行写操作

指针还是数组

image.png
image.png
字符串需要被改变->数组
字符串只读->指针

char*是字符串?

image.png
char*可以指向字符串,也可以指向单个字符,不一定是字符串。
只有结尾为\0的字符数组,才是字符串。

字符串输入输出

字符串赋值

image.png
image.png

字符串输入输出

image.png
image.png
image.png
scanf读入一个单词(到空格、Tab、回车为止,用来区分两次输入)
scanf函数不知道读入数据的长度,如果超出数组大小,会发生数据越界,导致程序崩溃

安全的输入

image.png
下一次scanf从超出允许读入的字符开始

常见错误

image.png
·**以为char是字符串类型,定义了一个字符串类型的变量string就可以直接使用了,char**也可以指向单个字符
·
由于没有对string初始化为0,所以不一定每次运行都出错(指针没有初始化,原来的内存空间是什么值就指向哪)**

空字符串

image.png
“”两个紧挨着的双引号表示空字符

问题

image.png
image.png
演示的程序输入超过8个字符了,为什么输出结果第一个word没有任何内容了?

数组在内存里是连续存放的,word2中的数据越界,导致’\0’存在了word的起始位置。而系统在读word的时候,第一个字符是’\0’,认为这个是空字符串,所以不输出任何结果。**
image.png

字符串数组

char * a[]和a[ ][10]

image.png
a[ ][10]表示数组a[ ],数组的元素个数不确定。每一个元素,如a][0],里面包含char[10](10个字符变量)
image.png
这种写法定义字符串数组,char a[][10]需要注意每一个字符串长度都不能超过规定长度,否则会产生警告。
image.png
char * a[]表示数组a[ ]是char类型,但a[ ]每个都是指针,指向一段代码段
image.png

例子:月份输出

image.png

主函数参数

image.png
image.png
image.png