上QQ阅读APP看书,第一时间看更新
1.16 字符串
C语言没有专门为存储字符串设计一个单独的类型,因为没有必要。之前已经介绍过,字符串事实上就是一串字符,所以只需要在内存中找一块空间,然后存放一串字符类型的变量就可以了。
定义字符串的语法是:
对字符串进行赋值,事实上就是对这一块空间里边的每一个字符变量大小的位置进行赋值,通过索引号来获得每个位置:
比如下面这几个例子:
·char name[5];
·name[0]='F';
·name[1]='i';
·name[2]='s';
·name[3]='h';
·name[4]='C';
注意:
这个索引号是从0开始计算的,所以由5个字符构成的字符串,它们的索引号分别是0、1、2、3、4。
字符串的定义还可以直接这样写:
下面举个例子:
程序实现如下:
看上去是没问题了,但这个程序是有隐藏漏洞的。现在添加一个printf函数,打印“Hello!”。
程序实现如下:
怎么会出现乱码呢?大家回忆一下,之前讨论过的C语言是如何处理字符串常量的。没错,为了确定字符串结束的位置,规定在字符串的最后加上一个'\0'来表示结束。这里声明了5个char类型的变量,刚好用来存放5个字符,这样最后就没有位置存放表示字符串结束的'\0'了。所以应该这样改:
修改后程序实现如下:
定义字符串时,中括号里面的数量其实可以不写,编译器会自动帮你计算字符串的长度:
事实上还可以再偷懒一下,直接在大括号中写入字符串常量:
这样使用字符串常量就不必惦记着一定要在末尾添加一个'\0',它会自动帮你加上。
最后,如果使用字符串常量的话,这个大括号也是可以省掉的: