字符串vs字符数组

今天是复习到C语言的字符串和字符数组的大小长度比较的内容

字符串和字符数组的表现形式

同样是char类型,字符串和字符数组在表现形式上就有很大的差异

char a[] = "ABCDEF";
char b[] = { 'A','B','C','D','E','F' };

例如在这段简单的代码中,char a[]是字符串,char b[]是字符数组,虽然两个都是char类型,也由相同的字符组成,但是他们的大小,长度都是不一样的,这是由于计算机在对于二者的处理是不同的,如果是字符串,则计算机会自动在其最后加入'\0'表示结束,所以在计算机中真正显示的应该是char a[]="ABCDEF\0",但是在字符数组中,则不会添加\0作为终止符,如果需要求其长度,要么对字符数组进行初始化,例如char b[10]={'A','B','C','D','E','F'},要么手动添加\0作为终止,例如char b[10]={'A','B','C','D','E','F','\0'},否则求出来的长度是随机数值。

sizeof和strlen

从表面上看,sizeof求的是表面大小,所见即所得

char a[] = "ABCDEF";
char b[] = { 'A','B','C','D','E','F'};
printf("%d,%d\n", sizeof(a), sizeof(b));

上述代码的运行结果是7,6,大家可以发现,由于a[]和b[]虽然看起来都是六个字符,但是输出的大小有一个字节的误差,这是因为系统会在字符串后面自动添加\0,因此虽然a[]看起来是六个字符,实际上是七个,而由于字符数组并没有系统添加的\0,因此是六个。

	char a[] = "ABCDEF";
	char b[] = { 'A','B','C','D','E','F'};
	printf("%d.%d", strlen(a), strlen(b));

 上述代码的运行结果是6,50,这是由于我们既没有给b[]规定大小长度,也没有在里面添加\0作为终止,因此系统则一直寻找\0,直到找到\0才会输出此数组大小。

    char a[] = "ABCDEF";
	char b[] = { 'A','B','C','D','E','F','\0'};
	printf("%d,%d\n", sizeof(a), sizeof(b));
	printf("%d.%d", strlen(a), strlen(b));

经过修改,此时代码的运行结果为

7,7

6,6

通过上面代码我们可以发现,sizeof和strlen都可以求得字符串和字符数组的大小,但是strlen在字符数组中受\0的限制,sizeof在计算长度的时候会将\0作为字符一起计算在内,个人认为如果遇到题目让比较字符串和字符数组的长度,用sizeof是更好的选择。

这就是今天的收货,over,over,欢迎指教~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

箬渊凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值