目录
前言
在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'后面的,都不读。
二、混淆点
#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("%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;
}
我得到的结果是这个样子的:
因为编译器将 '\0' 认定为字符串结束的标志,读到 '\0' 就不继续读后面的了 。而arr1,arr2,我们没有打上\0,所以编译器读到'd'后,还会继续往后面读取,直到读取到'\0'。于是,输出的arr1,arr2长度也是随机数值。arr3为正确输入方式。
而,arr4,arr5是字符串,可以在末尾加上’\0‘,也可以不加。
三、sizeof和strlen的区别
sizeof是操作符,是计算所占内存空间的大小。
strlen是库函数,只能针对字符串,求字符串的长度,计算的字符串中\0之前的字符个数。