用一个字符数组可以存放一个字符串中的字符。如:

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′)。因此,上面的初始化与下面的初始化等价:
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;
}

转载于:https://www.cnblogs.com/ymd12103410/p/9993159.html

C++字符串结束标识相关推荐

  1. atof跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换

    atof(),是C 语言标准库中的一个字符串处理函数,功能是把字符串转换成浮点数,所使用的头文件为<stdlib.h>.该函数名是 "ascii to floating poin ...

  2. c/c++格式化字符串的标识

    我们在格式化字符串时会遇到长整型等类型需要用到%下面是每个类型的介绍 %c 输入输出为单个字符 %s 输入输出为字符串 %d 有符号10进制整数(%ld 长整型,%hd短整型 ) %hu 无符号短整形 ...

  3. Suzy找到实习了吗 | 字符串结束啦 今天学习kmp 题还没做!!!记得回来补!!!

    kmp 看完了kmp的讲解视频 还没做题,跳过了 先占坑 再来补!!!!

  4. c语言 连接两个字符串不使用库函数

    #include<stdio.h> void main(){//输入两个字符串并连接 不能使用库函数strcat//字符串str1printf("please enter str ...

  5. java实现两个字符串相连接_P005 实现两个字符串的连接 ★

    所属年份:2012.3; 编写函数fun,其功能是:实现两个字符串的连接(不要使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串的后面. 例如,分别输入下面两个字符串: FirstS ...

  6. C字符串与C++字符串基本用法

    C字符串与C++字符串基本用法 1. 字符数组与字符串区别 C++中,字符数组和字符串都是通过char关键字来定义的,但二者不同,显著的区别就是字符串的长度是字符数目加1,因为包含了\0结束符,而字符 ...

  7. 力扣(LeetCode)刷题,简单+中等题(第26期)

    目录 第1题:字典序排数 第2题:字符串解码 第3题:查找常用字符 第4题:所有奇数长度子数组的和 第5题:长按键入 第6题:分割字符串的最大得分 第7题:回文链表 第8题:有多少小于当前数字的数字 ...

  8. c语言将字母与数字分开存放,2017年计算机二级《C语言》考前提分试题及答案9...

    二.程序填空题(共18分). 下列给定程序中,函数flm的功能是:将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的次序. 例如,s所指的字符串为"d ...

  9. 一文深入了解 Redis 内存模型,Redis 的快是有原因的!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:编程迷思 cnblogs.com/kismetv/p/865 ...

最新文章

  1. mysql需要vc_VC连接MySql
  2. 常用对照表之TCP及UDP常见端口参照
  3. (多图)老弟,你连HTTPS 原理都不懂,还给我讲“中间人攻击”,逗我吗...
  4. 【2012百度之星/资格赛】F:百科蝌蚪团
  5. 函数的返回值-交换两个变量的值
  6. ES6-2 块级作用域与嵌套、let、暂行性死区
  7. java学习(23):if..else
  8. linux驱动编写(电源管理驱动)
  9. [MySQL]--查询性能分析工具-explain关键字
  10. Oracle RAC FTA
  11. 浅析数据中心机房工程
  12. js中替换和全部替换
  13. Geometry-enhanced molecular representation learning for property prediction|GeoGNN|将几何增强分子表示用于分子性质预测
  14. MySQL启动报错: Failed to start LSB start and stop MySQL
  15. Spring AOP 学习总结
  16. InDesign 教程如何创建和修改和使用母版页
  17. Python爬虫-国家企业信用信息公示系统App
  18. 高德地图交通态势爬取并存入MySQL数据库
  19. 数据结构-树结构-哈夫曼应用-修理牧场
  20. Roson的Qt之旅 #114 QML Repeater(重复器)

热门文章

  1. EasyRTSPServer视频/RTSP服务/摄像机模拟器/安防视频服务器调用流程说明
  2. 如何进行关键词分析?
  3. 微信小程序开发个人博客高级篇
  4. Q4还没结束,我已看到2022年全球科技并购已近3000亿美元了
  5. [开车技巧]开车高手整理了一年
  6. 乔布斯 创新精神赢得尊重
  7. 惠普HP LaserJet Pro 300 color MFP M375nw 驱动
  8. iNFTnews | 当医学和元宇宙发生碰撞时,会怎样?
  9. 三原县地图可视化大屏数据 三原县地图.js
  10. win10 64位下Python中NLTK,pip,numpy等安装方法