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

请高手指点!
多谢!

在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'}; //故意给数组预留一个空位

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

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-05-19
这是因为,在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'};
第2个回答  2015-12-08

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

例如:

#include<stdio.h>
#include<string.h>
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
*/

第3个回答  2008-10-28
字符串是借助于字符型一维数组来存放的,'\0'ASCLL代码值为0,它作为标志占用存储空间但不记入串的实际长度,所以用来作为字符串的结束标志本回答被提问者采纳
第4个回答  2008-10-28
不是以0做为结尾,而是当字符串在存储的时候,会自动在最后面加上一个串结束符'/0',这不是我们通常认为的O,而是一个串结束符,是一个固定的符号,每个字符串在存储的时候都会自动加上的.

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

c语言中字符数组中最后为什么必须为\\0?
c语言中字符数组并没有规定最后一个字符为'\\0',甚至可以不包含'\\0',添加'\\0'作为结束标志是针对于c语言对字符串的处理而言的,因此,字符数组中最后一个字必须为‘\\0’是错误的。C语言中没有字符串类型,字符串是存放在字符型数组中的。在C语言中,是将字符串作为字符数组来处理的。为了测定字...

C语言 字符串 编程 输入字符结束时赋值'\\0'
这是因为字符串是以‘\\0'做为结束标志的。在内存中,比如字符串,“abc",实际上是四个字节的空间abc'\\0'。在你的程序中:while((s[i]=getchar())!='\\n')i++;s[i]='\\0';前面的while只是得到了字符串的字符,而没有结束标志。如果没有最后一句s[i]='\\0';你的字符就不能正确结束。

为什么c语言中\\0是字符串的结束?
\\0' 在c语言中是字符串的结束符,C语言标准库中对字符串的处理都会以\\0作为字符串结束标志,任何字符串之后都会自动加上'\\0'。'\\0'的意思是 ASCII 码为 0 的字符,对应的字符是(Null),表示“字符串结束符”,是字符串结束的标志。字符串常量占的内存字节数等于字符串中字节数加1。增加的一...

0是C语言字符串结束标志?
是第一个ASCII码,数字0的ASCII码是48,所以写程序你要用'\\0'结尾,比如char a[3] = {'h','i','\\0'},或者直接char a[] ="hi",编译器都会认为是字符串数组,且以'\\0'结束。你调试程序时,可以看到内存里面是0,这是ASCII码的表示,也可以看作是一个unsigned int类型。

c语言中字符串,为什么最后要加个‘\\0' ?
\\0'在c语言中代表着字符串的结束 在你不输入'\\0'的时候 字符串不知道已经读完了 还有继续向后读 读一个字节长度是?两个字节长度 就是烫 这是ascii值决定的 汉子是两个字节就不多说了 '\\0'的ascii值为(0x)00有时候如果未定义可能会出现一堆烫知道出现默认的00(也就是'\\0')才会...

C语言中字符串结束符'\\0'就是0. 这句话有什么依据吗
'\\0'是转译字符,意思是告诉程序,这不是字符0,我要的是数字0的2进制直接放进来,因为acsii码的0可不是00000000 本回答由提问者推荐 举报| 答案纠错 | 评论(1) 16 1 rail_fish 采纳率:61% 擅长: C\/C++ C#\/.NET 汇编语言 操作系统\/系统故障 硬件 ...

c语言中用\\0做字符串结束标志 \\0为什么不用\\000表示
\\000明显就是\\0的三位八进制,所以是一样的 \\00就要看后面的一位是不是数字,如果是数字也是三位八进制表示法,如果不是数字那\\0就是结束标志了

c语言输出的最后总是以“0”结尾是为什么?
你的程序写的有问题,我重新改下,测试通过。你的程序主是由于对scanf函数对字符串的输入接收理解不正确。你的:for(i=0;i<2;i++)scanf("%s,%s,%c,%d",sa[i].name,sa[i].num,&sa[i].sex,&sa[i].age);我更改后的:for(i=0;i<2;i++) { printf("第%d位,name:", i+1);g...

C语言中字符串结束符'\\0'就是0. 这句话有什么依据吗
'\\0'就是8位的00000000,因为字符类型中并没有对应的这个字符,所以这么写。在数值类型里就代表数字0。补充:这个你要去学下基础的,数值类型存储时,最高位决定正负号,其他位都为0可不就是0了么?'\\0'是转译字符,意思是告诉程序,这不是字符0,我要的是数字0的2进制直接放进来,因为acsii码...

相似回答