C语言中的结束符‘\0‘

C语言中的结束符’\0’

'\0’是C语言中的字符串结束标志。它的十进制输出:0,字符型输出:空字符(什么都没有,空空如也)。
(C语言中字符串是用英文输入法的双引号括起来,而字符是用英文输入法单引号括起来,本文由于文本输入问题,所以部分英文输入法的单引号打不出来而显示了中文输入法的单引号)
'\0’是转译字符,意思是告诉编译器这并不是字符0,而是空字符。空字符\0对应的二进制是00000000,而数字0对应的是00110000(也就是ASCII码0x30)。
下面展示一些 代码

//输出\0
	printf("%c\n", 0);
	printf("%c\n", 0x30);
	printf("%c\n", '\0');
	printf("%d\n", '\0');
	printf("OK\n");	
//Ubuntu编译运行new3.c文件
gcc new3.c 
./a.out
//输出结果如下

0

0
OK

C语言中,字符串总是以’\0’作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符 ‘\0’存入数组,并以此作为该字符串是否结束的标志。有了结束符’\0’标志后,就不必再用字符数组的长度来判断字符串的长度了。

例如

把一个字符串赋值给数组:char str[] = {“yyds”};
实际上数组str在内存中的实际存放情况为:
yyds ‘\0’
这后面的’\0’是由C编译系统自动加上的。所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。
把字符数组str中的字符串拷贝到字符数组arr中。串结束标志’\0’也一同拷贝。
下面展示一些 例子程序

	char str[] = {
    
    "yyds"};
	int i = 0;

	printf("数组str长度为:%ld\n", sizeof(str));

	for(i; i < sizeof(str); i++)
	{
    
    
		printf("str[%d] = %c\n", i, str[i]);	
	}
	printf("OK");
数组str长度为:5
str[0] = y
str[1] = y
str[2] = d
str[3] = s
str[4] = 

OK

特例

  1. 数组长度不够。假设定义一数组,如:char str[4]={“yyds”};
    由于字符组str的长度为4,所以后面的信息会丢失,即结束符’\0’丢失。

  2. 如果在给数组赋值时,把每个字符单独用引号括起来。也会丢失’\0’。如:
    char str[]={‘y’,‘y’,‘d’,‘s’};

如果希望数组以’\0’结束,则可以写成以下三种形式中的一种:

  1. char str[ ]= {“yyds”}; //字符串赋值
  2. char str[] = {‘y’,‘y’,‘d’,‘s’,‘\0’}; //手动添加结束符\0
  3. char str[5] = {‘y’,‘y’,‘d’,‘s’}; //故意给数组预留一个空位

猜你喜欢

转载自blog.csdn.net/William_swl/article/details/120205948