初学者对于c语言中字符串的一些问题解答

在初学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进行计算字符串长度时,也是以结束符为判断,知道遇到结束符才停止,且结束符不记为长度以内。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值