一、字符串和字符串常量
1.字符串是一串以空字符'\0'结尾的char类型值。字符串可以存放在字符数组中,也可以用字符串常量表示。在字符串常量中,空符(除了空字符)是被包含在双引号中的。编译器为它加上空字符。例如存储"joy"时有四个字符:j、o、y、和\0。
2.字符串常量是指位于一对双引号中的任何字符。可以用来初始化字符数组。数组大小至少应该比字符串长度大1。这样才能存放空字符。
3.字符数组名和其它数组名一样也是数组首元素的地址。因此下面的式子对数字m1成立:
m1 == &m1[0],*m1 == 'L',and *(m1+1) == m1[1] == 'i'
4.增量运算符只能用在变量名前,而不能用在常量前。例如:
char heart[] = "I love Tillie!";
char *head = "I love Millie!";
主要的区别在于数组名heart是个常量,而指针head是个变量。所以heart++是错误的。
5.数组的初始化是从静态存储区把一个字符串复制给数组,而指针初始化只是复制字符串的地址。
静态存储:指如果在一个函数中试用字符串常量,即使是多次调用了这个函数,该字符串在程序的整个运行过程中只存储一份。
初始化一个指向字符串文字的指针时最好使用const修饰符避免产生错误:
const char *p1 = "Klingon";
6.声明数组时用char *mytal[LIM];比char mytal_2[LIM][LINLIM]更节省存储空间,如图:
二、字符串输入
1.对函数声明时最好明确指出数组的大小:
char name[81];
2.gets()函数
gets()读取换行符之前的所有字符但是不包括换行符。
gets()函数如果在一切顺利的情况下返回的是读入字符串的地址,如果出错或者遇到文件结尾就会返回一个空(或0)地址。利用while(gets(name) != NULL)这样的指令可以检查是否到了文件的结尾,并读取一个值。
3.puts()函数
puts()函数显示字符串时自动在其后添加一个换行符。所以gets()函数和puts()函数相结合使用。
4.函数利用指向字符串第一个字符的指针来标识它所作用的字符串。其传递的是第一个字符的地址。可以根据标志结束的空字符来确定字符串的结束。