赞
踩
在初学c语言的时候对于字符串的理解不是特别到位,遇到了许多的问题,在互联网上通过搜寻相关的资料进行学习还有上机的实践之后有了许多的收获,现在在这里进行记录分享给大家。
首先我们是用char类型数组赋字符串
当我们要输出字符串abcd时,我有两种初始字符串的方法:
一种是,用双引号直接赋abcd
一种是,用单引号逐个赋a,b,c,d
但是两者在使用上有着差异,比如在计算数组的长度时,还有计算数组的存储大小时,数值会不同,下面我们通过代码来学习这个区别。
- #include <stdio.h>
- #include <string.h>
- int main()
- {
- char arr1[]="abc"; //用双引号来定义字符串abcd
- char arr2[]={'a','b','c'}; //用单引号逐个定义字符串abcd
- printf("%s\n",arr1); //输出数组arr1
- printf("%s\n",arr2); //输出数组arr2
- printf("%d\n",strlen(arr1)); //计算数组arr1的长度
- printf("%d\n",strlen(arr2)); //计算数组arr2的长度
- return 0;
在最后编译的结果中我们可以看到,通过双引号和单引号得到的结果,输出与计算的长度都不一样。
在用char类型数组赋字符串时,会 自动的判断\0作为结束符。
当用双引号时,系统自动增加了一个转义符\0,但是单引号并没有。
相当于,
char arr1[]={"abcdef"}; 等价于 char arr2[]={'a','b','c','d','e','f','\0'};
其中\0是转义符在ASCII码中是等价于0,在cahr 类型下,上述也等价于
char arr2[]={'a','b','c','d','e','f',0};
正是由于这个双引号的性质才产生了这么多的不同。
下面接着解析为什么输出时,还有计算数组长度会不同。
在char输出时,会寻找\0作为结束符,并打印出结束符前面的字符串,因为双引号中自带有结束符,因此 char arr1[]="abc"; printf("%s\n",arr1); 输出的就是为双引号中的字符串abc
而由于单引号不自带结束符,我们也没有输入结束符结尾,因此编译的时候系统在编译到c时后面没有发现结束符就会接着往后面编译,随机的输出一些字符直到遇到0或者\0。
char arr2[]={'a','b','c'}; printf("%s\n",arr2); 输出就是abc加上一些随机的字符
同理的是,在使用strlen进行计算字符串长度时,也是以结束符为判断,知道遇到结束符才停止,且结束符不记为长度以内。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。