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

请高手指点!多谢!... 请高手指点!
多谢!
展开
 我来答
小耳朵爱聊车
高粉答主

2018-12-05 · 说的都是干货,快来关注
知道大有可为答主
回答量:7378
采纳率:100%
帮助的人:307万
展开全部

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

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

听不清啊
高粉答主

2015-05-19 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
这是因为,在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'};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
985967518
2015-12-08 · 知道合伙人教育行家
985967518
知道合伙人教育行家
采纳数:18027 获赞数:109866
14年本科毕业于河南理工大学,至今就读于河南理工大学攻读硕士学位,从事编程学习已有5年。

向TA提问 私信TA
展开全部

因为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
*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4271d3c0d
2008-10-28
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
字符串是借助于字符型一维数组来存放的,'\0'ASCLL代码值为0,它作为标志占用存储空间但不记入串的实际长度,所以用来作为字符串的结束标志
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
恭民堡6740
2008-10-28 · 超过20用户采纳过TA的回答
知道答主
回答量:83
采纳率:0%
帮助的人:63.9万
展开全部
不是以0做为结尾,而是当字符串在存储的时候,会自动在最后面加上一个串结束符'/0',这不是我们通常认为的O,而是一个串结束符,是一个固定的符号,每个字符串在存储的时候都会自动加上的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式