C++字符串结束标识
⽤⼀个字符数组可以存放⼀个字符串中的字符。如:
char str[12]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’};
⽤⼀维字符数组str来存放⼀个字符串″I am happy″中的字符。字符串的实际长度(10)与数组长度(12)不相等,在存放上⾯10个字符之外,系统对字符数组最后两元素⾃动填补空字符′\0′。为了测定字符串的实际长度,C++规定了⼀个“字符串结束标志”,以字符′\0′代表。在上⾯的数组中,第11个字符为′\0′,就表明字符串的有效字符为其前⾯的10个字符。也就是说,遇到字符′\0′就表⽰字符串到此结束,由它前⾯的字符组成字符串。
对⼀个字符串常量,系统会⾃动在所有字符的后⾯加⼀个′\0′作为结束符。例如字符串″I am happy″共有10个字符,但在内存中它共占11个字节,最后⼀个字节′\0′是由系统⾃动加上的。
在程序中往往依靠检测′\0′的位置来判定字符串是否结束,⽽不是根据数组的长度来决定字符串长度。当然,在定义字符数组时应估计实际字符串长度,保证数组长度始终⼤于字符串实际长度。如果在⼀个字符数组中先后存放多个不同长度的字符串,则应使数组长度⼤于最长的字符串的长度。
说明:′\0′只是⼀个供辨别的标志。
如果⽤以下语句输出⼀个字符串:
cout<<″
How do you do?″;
系统在执⾏此语句时逐个地输出字符,那么它怎么判断应该输出到哪个字符就停⽌了呢?
在C语⾔中,把⼀个字符串存⼊⼀个数组时,也把结束符 '\0'存⼊数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,就不必再⽤字符数组的长度来判断字符串的长度了。 '\0'就是字符串结束标志,在C++中,则会把字符长度存在对象的.size()中,前提是使⽤string类,不是字符数组,string类⽤字符长度判断是否结束,就不会在最后插⼊⼀个'\0'来判断是否结束。##
下⾯再对字符数组初始化补充⼀种⽅法:⽤字符串常量来初始化字符数组。例如:
char str[]={″I am happy″};
也可以省略花括号,直接写成
char str[]=″I am happy″;
不是⽤单个字符作为初值,⽽是⽤⼀个字符串(注意字符串的两端是⽤双撇号⽽不是单撇号括起来的)作为初值。显然,这种⽅法直观,⽅便,符合⼈们的习惯。注意:数组str的长度不是10,⽽是11(因为字符串常量的最后由系统加上⼀个′\0′)。因此,上⾯的初始化与下⾯的初始化等价:
printf怎么输出字符char str[]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’,’\0′};
⽽不与下⾯的等价:
char str[]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’};
前者的长度为11,后者的长度为10。如果有
char str[10]=″China″;
数组str的前5个元素为′C′,′h′,′i′,′n′,′a′,第6个元素为′\0′,后4个元素为空字符。
int _tmain(int argc, _TCHAR* argv[])
{
char buf[6] = "apple"; //buf[5]直接在编译阶段就报错,尾端必须留出⼀个位置给'\0'
int i = -1, j = 1;
while (j)
if (buf[++i] != '\0')
{
j = 1;
printf("%c\n", buf[i]);
}
else
{
j = 0;
printf("%s\n", "end of cin");
}
return 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论