C语言的字符串为什么以0作为它的结尾?

请高手指点!多谢!
2024年12月03日 23:34
有5个网友回答
网友(1):

在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\0'作为串的结束符。

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

扩展资料:

说明:

把一个字符串赋值给数组:u8 str1[]={"cxjr.21ic.org"};

实际上数组str1在内存中的实际存放情况为: c x j r . 2 1 i c . o r g '\0' 

这后面的'\0'是由C编译系统自动加上的。所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。 把字符数组str1中的字符串拷贝到字符数组str2中。串结束标志'\0'也一同拷贝。

个案

1. 当数组长度不够。假设我们指定了数组长度,如:u8 str1[13]={"cxjr.21ic.org"};
由于字符组str1的长度为13,所以后面的信息会丢失,即'\0'丢失。

2. 如果在给数组赋值时,把每个字符单独用引号括起来。也会丢失'\0'。如:

u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g'};

如果希望数组以'\0'结束,则可以写成以下三者之一:

(1)u8 str1[]={"cxjr.21ic.org"}; //字符串赋值

(2)u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g','\0'}; //人工添加

(3)u8 str1[14]={'c','x','j','r','.','2','1','i','c','.','o','r','g'}; //故意给数组预留一个空位

参考资料来源:百度百科-字符串

网友(2):

这是因为,在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\0'作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。 '\0'就是字符串结束标志。

比如说,把一个字符串赋值给数组:
char str1[]={"www.baidu.com"};
实际上数组str1在内存中的实际存放情况为:
www.baidu.com'\0'
这后面的'\0'是由C编译系统自动加上的。所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。
把字符数组str1中的字符串拷贝到字符数组str2中。串结束标志'\0'也一同拷贝。

但是……也有一些例外情况发生。
比如,当数组长度不够。假设我们指定了数组长度,如:
char str1[13]={"www.baidu.com"};
由于字符数组str1的长度为13,所以后面的信息会“溢出”,即'\0'存到字符数组str1以外的地方去了,这是很危险的。

另外,如果在给数组赋值时,把每个字符单独用引号括起来。可能会丢失'\0'。如:
char str1[]={'w','w','w','.','b','a','i','d','u','.','c','o','m'};这就只能以字符数组使用,不能用字符串使用了。
如果希望数组以'\0'结束,则要么写成:
char str1[]={"www.baidu.com"};
要么写成(人工添加'\0'):
char str1[]={'w','w','w','.','b','a','i','d','u','.','c','o','m','\0'};
要么写成(故意给数组预留一个字节的空位,由系统自动初始化为'\0'):
char str1[14]={'w','w','w','.','b','a','i','d','u','.','c','o','m'};

网友(3):

因为c语言中没有字符串类型,所以借助字符数组来存储字符串,为了区别字符串,需要在字符数组的末尾添加ASCII为0,即'\0',来作为字符串的结束标志,并且不计入字符串长度。

例如:

#include
#include
int main()
{
char a[10]="hello",b[10]={'h','e','l','l','o'};
printf("%d,%d\n",strlen(a),strlen(b));//长度都是5,
puts(a);//a是字符串可以使用puts输出。 
return 0;
}
/*运行结果:
5,5
hello
*/

网友(4):

字符串是借助于字符型一维数组来存放的,'\0'ASCLL代码值为0,它作为标志占用存储空间但不记入串的实际长度,所以用来作为字符串的结束标志

网友(5):

不是以0做为结尾,而是当字符串在存储的时候,会自动在最后面加上一个串结束符'/0',这不是我们通常认为的O,而是一个串结束符,是一个固定的符号,每个字符串在存储的时候都会自动加上的.