C语言中的\0

目录

一、\0是什么?

二、混淆点

三、sizeof和strlen的区别



前言

在c语言的学习中,我也遇到了一些混淆的东西,现在就是写一下自己对于\0的理解吧,如果有错的地方,希望友友们能给我一个提醒。

一、\0是什么?

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

直接这么说,可能就理解不上来。我直接上代码。

#include
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'后面的,都不读。 

二、混淆点

#include
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("%d\n", strlen(arr1));
	printf("%d\n", strlen(arr2));
	printf("%d\n", strlen(arr3));
	printf("%d\n", strlen(arr4));
	printf("%d\n", strlen(arr5));
	return 0;
}

我得到的结果是这个样子的:

C语言中的\0_第1张图片

因为编译器将 '\0' 认定为字符串结束的标志,读到 '\0' 就不继续读后面的了 。而arr1,arr2,我们没有打上\0,所以编译器读到'd'后,还会继续往后面读取,直到读取到'\0'。于是,输出的arr1,arr2长度也是随机数值。arr3为正确输入方式。

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

三、sizeof和strlen的区别

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

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

你可能感兴趣的:(c语言,算法)