C语言:易混淆点\0

文章讨论了C语言中的字符串结束符的作用,指出字符串常以作为结束标志。它区分了sizeof操作符(计算内存大小)和strlen函数(计算字符串长度至为止)。文中通过示例代码展示了未明确指定时可能出现的混淆情况,并对比了不同数组和字符串定义方式下的内存占用和长度计算结果。

目录

前言

一、\0是什么?

二、sizeof和strlen的区别

三、混淆点

字符串长度

内存大小


前言

在c语言的学习中,有很多易混淆的地方,其中字符串及字符串数组中\0就是一个,现在说一下我的理解,不对的地方请多多指正。

一、\0是什么?

“\0”在c语言中代表“字符串结束符”。字符串总是以“\0”作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符“\0”存入数组,并以此作为该字符串是否结束的标志。

#include<stdio.h>
int main()
{
	char arr1[] = { 'a','b','c','d','e','\0','f'};
	char arr2[] = "abcde\0f";
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	return 0;
}

结果: 

也就是’\0'后面的,都不读。

二、sizeof和strlen的区别

sizeof是操作符,是计算所占内存空间的大小。

strlen是库函数,只能针对字符串,求字符串的长度,计算的字符串中\0之前的字符个数。

三、混淆点

#include <stdio.h>

int main()
{
	char arr1[] = { 'a','b','c','d' };
	char arr2[4] = { 'a','b','c','d' };
	char arr3[] = { 'a','b','c','d','e','\0' };
	char arr4[] = "abcde";
	char arr5[] = "abcde\0";
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	printf("%s\n", arr3);
	printf("%s\n", arr4);
	printf("%s\n", arr5);
	printf("*******************字符串长度*****************************\n");
	printf("%d\n", strlen(arr1));
	printf("%d\n", strlen(arr2));
	printf("%d\n", strlen(arr3));
	printf("%d\n", strlen(arr4));
	printf("%d\n", strlen(arr5));
	printf("*******************内存大小*****************************\n");
	printf("%d\n", sizeof(arr1));
	printf("%d\n", sizeof(arr2));
	printf("%d\n", sizeof(arr3));
	printf("%d\n", sizeof(arr4));
	printf("%d\n", sizeof(arr5));
	return 0;
}

结果:

因为编译器将 '\0' 认定为字符串结束的标志,读到 '\0' 就不继续读后面的了 。

字符串长度

arr1,arr2,我们没有打上\0,所以编译器读到'd'后,还会继续往后面读取,直到读取到'\0'。于是,输出的arr1,arr2长度也是随机数值。

arr3为正确输入方式,

arr4,arr5是字符串,可以在末尾加上’\0‘,也可以不加。

内存大小

arr1,arr2,arr3都是实际内存大小。

arr4,arr5字符串后面默认都有一个\0。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值