认识字符串
字符数组
字符串
字符串结尾要加’\0’
**word[]既是字符串,又是字符数组
\0表示字符串的结束,但它不是字符串的一部分。
不能用运算符对字符串做运算
**通过数组的方式可以遍历字符串
字符串变量
字符串常量
字符串变量
int型变量i和字符串变量s不在一个地方(地址不同)
字符串变量s位于代码段,只读,不能写
如果要修改字符串,使用数组来存放字符串
字符串的指针是指向一片只读区域
数组S3[]和int变量地址相似,可以对它进行写操作
指针还是数组
char*是字符串?
char*可以指向字符串,也可以指向单个字符,不一定是字符串。
只有结尾为\0的字符数组,才是字符串。
字符串输入输出
字符串赋值
字符串输入输出
scanf读入一个单词(到空格、Tab、回车为止,用来区分两次输入)
scanf函数不知道读入数据的长度,如果超出数组大小,会发生数据越界,导致程序崩溃
安全的输入
常见错误
·**以为char是字符串类型,定义了一个字符串类型的变量string就可以直接使用了,char**也可以指向单个字符
·由于没有对string初始化为0,所以不一定每次运行都出错(指针没有初始化,原来的内存空间是什么值就指向哪)**
空字符串
问题
演示的程序输入超过8个字符了,为什么输出结果第一个word没有任何内容了?
数组在内存里是连续存放的,word2中的数据越界,导致’\0’存在了word的起始位置。而系统在读word的时候,第一个字符是’\0’,认为这个是空字符串,所以不输出任何结果。**
字符串数组
char * a[]和a[ ][10]
a[ ][10]表示数组a[ ],数组的元素个数不确定。每一个元素,如a][0],里面包含char[10](10个字符变量)
这种写法定义字符串数组,char a[][10]需要注意每一个字符串长度都不能超过规定长度,否则会产生警告。
char * a[]表示数组a[ ]是char类型,但a[ ]每个都是指针,指向一段代码段