A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kama 中级黑马   /  2015-3-31 14:54  /  1628 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

字符串中\0的作用是什么?看了视频还不是很明白。

12 个回复

倒序浏览
“\0”是C语言字面的表示法,内存是0x00,大概说是遇到0x00作为结束符,读取字符串就是从开始读到0x00为止 如果没有"\0"就一直往后读 直到遇到0x00,这样做很危险
回复 使用道具 举报
给你摘抄一段....

在c语言中,将字符串作为字符数组来处理。(c++中不是)

在实际应用中人们关心的是有效字符串的长度而不是字符数组的长度,例如,定义一个字符数组长度为100,而实际有效字符只有40个,为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符'\0’代表。如果有一个字符串,其中第10个字符为'\0',则此字符串的有效字符为9个。也就是说,在遇到第一个字符'\0'时,表示字符串结束,由它前面的字符组成字符串。

系统对字符串常量也自动加一个'\0'作为结束符。例如"C Program”共有9个字符,但在内存中占10个字节,最后一个字节'\0'是系统自动加上的。(通过sizeof()函数可验证)

有了结束标志'\0'后,字符数组的长度就显得不那么重要了,在程序中往往依靠检测'\0'的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度。当然,在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度。(在实际字符串定义中,常常并不指定数组长度,如char str[ ])

说明:'\n’代表ASCII码为0的字符,从ASCII码表中可以查到ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不干。用它来作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志。

对C语言处理字符串的方法由以上的了解后,再对字符数组初始化的方法补充一种方法——即可以用字符串常量来初始化字符数组:

char str[ ]={"I am happy"};       可以省略花括号,如下所示

char str[ ]="I am happy";

注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的

             char str[ ];

             str="I am happy";
不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号‘’括起来的)作为初值。显然,这种方法更直观方便。(注意:数组str的长度不是10,而是11,这点请务必记住,因为字符串常量"I am happy"的最后由系统自动加上一个'\0')

因此,上面的初始化与下面的初始化等价

char str[ ]={'I',' ','a','m',' ','h','a','p','p','y','\0'};

而不与下面的等价

char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};

前者的长度是11,后者的长度是10.

点评

谢谢摘抄!!  发表于 2015-4-1 08:21
回复 使用道具 举报 1 0
每一个字符串在内存中都是以\0结束多,当你读取一个字符串多时候,遇到\0就是代表读取完毕
回复 使用道具 举报
PHXmilan 发表于 2015-3-31 15:09
“\0”是C语言字面的表示法,内存是0x00,大概说是遇到0x00作为结束符,读取字符串就是从开始读到0x00为止  ...

明白了,谢了。
回复 使用道具 举报
'\0'被用来作为字符串的结尾,它就是一个字符,在遍历字符串的时候遇到'\0'就结束遍历

点评

谢了。  发表于 2015-4-1 08:24
回复 使用道具 举报
Kman 中级黑马 2015-3-31 21:10:07
7#
字符串的结束标记。

点评

谢了。  发表于 2015-4-1 08:27
回复 使用道具 举报
kama 中级黑马 2015-4-1 08:22:50
8#
oucding 发表于 2015-3-31 15:45
每一个字符串在内存中都是以\0结束多,当你读取一个字符串多时候,遇到\0就是代表读取完毕 ...

嗯  好的 明白。
回复 使用道具 举报
字符串的结尾标志吧
回复 使用道具 举报
就是作为在字符串的结尾的结束标志,比如输入一个二维数组字符的话,你先输入{‘h’,‘e’,‘l’,‘l’,‘o’};在输入{‘o’,‘k’}如果在K后面加上\0的话,那么输出的时候,就只有OK,而没有hello。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马