【C】字符和字符串

字符

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,编译时会自动添加。