问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-24 01:49

我来回答

5个回答

热心网友 时间:2023-11-10 09:37

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

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

热心网友 时间:2023-11-10 09:38

这是因为,在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'};

热心网友 时间:2023-11-10 09:38

因为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
*/

热心网友 时间:2023-11-10 09:39

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

热心网友 时间:2023-11-10 09:39

不是以0做为结尾,而是当字符串在存储的时候,会自动在最后面加上一个串结束符'/0',这不是我们通常认为的O,而是一个串结束符,是一个固定的符号,每个字符串在存储的时候都会自动加上的.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
器世间的意思是什么 学吉他大概学费是多少 电吉他培训一般学费多少 天津吉他培训成人班费用多少 吉他培训班一般的学费多少钱 电脑怎么保存下载的视频文件怎么把视频保存到电脑上 双子座男生如果受到伤害死心了'是不是无论怎么做都无法挽回了。 和平精英微信怎么切换账号 更新之后换号方法 有关说说搞笑幽默句子的短句(寻找搞笑幽默的快乐) 说说你多大了,看看能不能做我干闺女怎么回复? C语言如何取字符串的最后一个,比如Lloyd2取最后一个字符 c语言,字符数组中最后一个字必须为‘\0’,为什么错? C语言字符串的最后一位 如果我变成一只小蚂蚁被你发现了,你会把我怎样(女生进) 我是一只蚂蚁作文600字开头用排比句 把自己想象成大自然的蚂蚁作文 情景作文 (“哎呀!我怎么成了蚂蚁?”) 谁有 如果有一天我变成了一只蚂蚁世界会是什么样子呢发挥想象写作文&#65532? 我是一只蚂蚁 作文 500字 把自己变成一只蚂蚁和一只蚂蚁对话作文 如果我变成了一只蚂蚁我会遇到怎样的危险? 你变形计,假如我变成了一只蚂蚁续写,被一阵风吹到哪里? 我把自己当成一只蚂蚁作文400字 盐酥鸡空气炸锅炸几分钟 我变成蚂蚁作文两百五十字 空气炸锅炸星星多少分钟多少度 先想象作文变成蚂蚁怎么写 空气炸锅上校鸡块的做法步骤图,怎么做好吃 六年级第一单元作文写我是一只蚂蚁怎么写? 空气炸锅如何做红烧鸡块? c语言从文件中读的字符存入数组中,数组最后一位是什么 C语言是不是字符串最后才会有\0,字符最后有吗? c语言中怎样截取一个字符串的最后一个字符? c语言,怎样截取一个字符串的最后一个字符? C语言中说字符串结尾应该是字符&#39;&#92;n&#39;,但是看我在下面的代码中结尾是字符&#39;g&#39;,不是也可以吗? c语言中字符串的最后一位字符如果替换到前面是不是会带上&#39;&#92;0&#39; C语言,输入1个字符串,然后显示出这个字符串的最后一个字符,我编的哪里错了呢 如何用c 指针指向一个字符串的最后一位 c语言中字符串,为什么最后要加个‘\0&#39; ? c 字符串数字最后一位 加1 C语言怎么去掉字符串最后一个字符? c语言字符串结束符问题 c语言中如何判断一个字符串到结尾 用C语言求出某一个字符在某一字符串中最后出现的位置 关于淘宝客链接有效期的一些问题 我的电脑打不开LOFTER网页怎么办 为什么我用手机和电脑登录lofter网页刷新都好慢有时候根本刷不出来其他网站却很正常 lofter网页端如何把打赏金额提现? 为什么lofter找不到自己的其他主页? a股是代表哪些证券