字符
C语言中用类型符char定义字符变量。
如: char a = 'C';
定义字符型变量a并使初值为字符'C','C'的ASCII代码是67,系统把整数67赋给变量a。
a是字符变量,实质上是一个字节的整形变量,由于它常用来存放字符。所以称之为字符变量。可以把0~127之间的整数赋给一个字符型变量。在输出时可以选择以十进制整数形式(%d)输出,或以字符形式(%c)输出。
int main(){
char a = 'C';
char b = 68;
printf("%c = %d\n",a,a);
printf("%c = %d\n",b,b);
return 0;
}
输出结果:
C = 67
D = 68
输出字符型变量的值时,C语言会根据选择的输出形式(%d或%c),输出该值在ASCII字符表中所对应的值。
对于ASCII字符表,详细可以查看: ASCII字符表
字符串
声明字符串:char 变量名[数量];
例: char name[5]; //声明一个包含五个字符的字符串
给字符串赋值: 变量名[索引号] = 字符;
例: name[0] = 'H'; //字符串中索引为0的字符(即第一个字符)为'H',
name[1] = 'e';
name[2] = 'l';
name[3] = 'l';
name[4] = 'o';
定义字符串:
例: char name[5] = {'H' , 'e' , 'l' , 'l' , 'o' };
或 char name[] = {'H' , 'e' , 'l' , 'l' , 'o'};
或 char name[] = "Hello";
字符串打印
int main(){
char a[5] = {'H','e','l','l','o'};
printf("%s\n",a);
return 0;
}
输出结果
Hello
此时输出结果无问题,但如果再打印字符串后再打印其他东西。如
int main(){
char a[5] = {'H','e','l','l','o'};
printf("%s\n",a);
printf("World\n")
return 0;
}
Hello乱码 //此处用中文“乱码”统一代替输出结果中的乱码
World
可以看到,打印的字符串后面多了一些乱码。这是因为,为了确定字符串在内存里面的结束位置,C语言规定在字符串的最后加上一个\0(空字符)表示结束。而上面代码中char a[5]声明了一个包含5个字符的字符串,且5个字符都填充满了,没有\0的位置,所以c语言不知道在哪里结束会一直读取下去。
修改方法如下:
方法①:
int main(){
char a[6] = {'H','e','l','l','o','\0'};
printf("%s\n",a);
printf("World\n")
return 0;
}
将5改成6,使字符串包含6个字符,再在最后填充一个\0
方法②:
int main(){
char a[] = {'H','e','l','l','o','\0'};
printf("%s\n",a);
printf("World\n")
return 0;
}
因为编译器在编译时会自动计算字符串的字符个数。所以可以去掉中括号内的数字,并在字符串的最后加上一个\0
方法③:
int main(){
char a[] = {"Hello"};
printf("%s\n",a);
printf("World\n")
return 0;
}
直接在大括号里写上字符串常量(用双引号括起来的),这样就不用在末尾添加\0,编译时会自动添加。