假定你要把一个字符常量初始化为字母 A
可使用下列初始化把字符 A 赋给 grade;
char grade = 'A';
单引号中的一个字符是 C 的一个字符常量,编译器遇到‘A’时会将其转换为相应的 编码值,其中单引号是必不可少得且不可用双引号替代。
继续看
char broiled; //声明一个 char 变量
broiled = 'A'; //可以
broiled=A; //不可以!T被看作一个变量
broiled = "A"; // 不可以,“T”被看作一个字符串```
如果不使用单引号,编诇器会将 A 规为一个变量名;如果使用双引号,编诇器将其 规为一个字符串。
那么字符和字符串的内在区别在哪里?
#C规定以字符'\0'作为字符串结束标志#
'\0'是一个ASCII码为0的字符(当然它并不是字符'0'),它不会引起任何控制动作,也不是一个可显示的字符。而字符串"A"实际包含2个字符:'A'和'\0'
那么如果我们想用字符串 来赋值变量呢?
C语言中没有专门的字符串变量,如果要将一个字符串存放在变量中,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。
定义: char c[10]
字符型与整型互相通用,因此 int c[10] 也可以定义字符数组。但由于两种类型分配字节不同, 用整型来定义会浪费空间, 另外这样定义实际意义也不大, 只是为了说明其合法性。
最简单的方法即逐个赋值: char c[10]={'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y'}; 10个字符分别赋绐c[0]到c[9]10个元素。
初值个数小于数组长度,则只将这些字符赋绐数组中前面的元素,其余元素自动定为空字符(即'\0')。
可以用字符串常量来初始化字符数组;
char c[]="I am happy"; #*注意此时数组的长度不是10,而是11,因为系统自动加上了'\0'结束符*#
#### 字符数组的输入输出
- 逐个字符输入输出。用格式符"%c"输入或输出一个字符。
- 字符数组的输出
先来看一段代码的表现
char * a = "aaa";
char b[] = {'a','a','a','\0','a','a','a','\0'};//中间有结束符
char c[] = {'a','a','a','a','a','a'};//无结束符
char d[] = {'a','a','a','a','a','a','\0'};//有结束符
printf(" a = %s \n b = %s\n c = %s\n d = %s\n",a, b,c,d);
结果:
a = aaa
b = aaa
c = aaaaaa\232�
d = aaaaaa
那么可以得出一些结论
1. 将整个字符串一次输入或输出。用"%s"格式符,意思是输出字符串(String)。例如:
char c[]="china";
printf("%s", c);```
- 如果一个字符数组中包含一个以上'\0',则遇第一个'\0'时输出就结束。
- 无结束符时,可能会打出奇奇怪怪的东西(取决于内存上的内容,同样遇到\0结束输出), **所以一个受控的字符串应该加入结束符 **