zoukankan      html  css  js  c++  java
  • C++中字符串的结尾标志

        是C++中字符串的结尾标志,存储在字符串的结尾,它虽然不计入串长,但要占一个字节的内存空间。在百度百科中查看词条,会有这样一句话:c/c++中规定字符串的结尾标志为''。有人可能认为,在C语言里(C++会不同),''并不是字符型,而是int型。在这里,我们姑且和百度词条作者保持一致,认为与''是等价的。由于不同处理器的位数不同,''并不一定是8位的00000000。实际上,由于不同处理器的位数不同,sizeof(int)返回的结果也都不同,而sizeof(char)返回结果一般是1,对8位机来说,一个字节由8位组成,16位机一个字节由16位组成,我们通常用的电脑通常是32位的,即一个字节由32位组成,现在已经是64位机了。CPU一般是以字节为单元进行读取的。但是一般情况下大家还是认同1Byte等于8bit的说法,因为这是构成的最小位数。

        ''是转义字符,意思是告诉程序,这不是数字0。''和0两者基本上可以通用,例如: string[i] != ''和string[i] != 0是一样的。不过''的类型是char型,而0是int类型,所以在大多数计算机上,sizeof(0) = 4而sizeof('') = 1,这在特殊情况下不可通用。另外扩展一下,''与'0'也是不同的,他们都是字符,但是他们的ASCII码是不同的:'' ASCII码值为0,'0' 也可以写成'x30' ASCII码值为48。

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

        ''就是 字符串结束标志。比如说,把一个字符串赋值给数组:char str1[] = {"Welcome!"}。实际上数组str1在内存中的实际存放情况为: 'W' 'e' 'l' 'c' 'o' 'm' 'e' '!' ''。这后面的''是由C编译系统自动加上的。所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。 把字符数组str1中的字符串拷贝到字符数组str2中。串结束标志''也一同拷贝。 

        但是……也有一些例外情况发生。比如,假设我们指定了数组长度但数组长度不够。

        如:char str1[8] = {"Welcome!"}。由于字符组str1的长度为8,所以后面的信息会丢失,即''丢失。

        另外,如果在给数组赋值时,把每个字符单独用引号括起来,也会丢失''。

        例如:char str1[] = {'W', 'e', 'l', 'c', 'o', 'm', 'e', '!'};

        如果希望数组以''结束,则要么写成:char str1[] = {"Welcome!"};

        要么写成(人工添加''):char str1[] = {'W', 'e', 'l', 'c', 'o', 'm', 'e', '!', ''};

        要么写成(故意给数组预留一个空位):char str1[9] = {'W', 'e', 'l', 'c', 'o', 'm', 'e', '!', ''};

        最后,有兴趣的童鞋可以思考一下''与NULL的区别,你会发现C语言中我们还有很多细节没有注意到。

  • 相关阅读:
    ArrayList removeRange方法分析
    LinkedHashMap源码分析(基于JDK1.6)
    LinkedList原码分析(基于JDK1.6)
    TreeMap源码分析——深入分析(基于JDK1.6)
    51NOD 2072 装箱问题 背包问题 01 背包 DP 动态规划
    51 NOD 1049 最大子段和 动态规划 模板 板子 DP
    51NOD 1006 最长公共子序列 Lcs 动态规划 DP 模板题 板子
    8月20日 训练日记
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/andrewlee0708/p/str_end.html
Copyright © 2011-2022 走看看