今天在带大一学生C++上机时,涉及到一个string类型的字符串是否以\0结尾的问题,本来我很坚定string类型结尾并没有\0,C风格的字符数组才会那样。但是程序运行结果却说明string类型的字符串后面确实有\0。

于是回实验室后自己又实验了下,才发现这和编译器有关,真坑爹。

对于如下一段测试程序,在C-free 5.0和g++ 4.1上输出yes,而在VS2010上执行时报错!

[cpp] view plaincopy print?
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. int main()
  5. {
  6. string str="x";
  7. if(str[1]=='\0')
  8. cout<<"yes";
  9. else
  10. cout<<"no";
  11. return 0;
  12. }

#include<iostream>
#include<string>
using namespace std;
int main()
{string str="x";if(str[1]=='\0')cout<<"yes";elsecout<<"no";return 0;
}

VS报错如下图:

当把上面代码中str[1]改成str[2]时,VS2010依然报错,但C-free 5.0输出了no,而g++ 4.1还是输出yes

另外,在网上查资料时发现:

全局的std::getline返回std::string,这个不一定是'\0'结尾。有的编译器会加,有的编译器不会加。但是,注意:新的C++标准C++11里面规定std::string一定是以'\0'结尾,就看你的编译器有没有实现新标准了。

istream::getline返回c字符数组,这个一定是'\0'结尾。

关于string类型的字符串是否以\0结尾相关推荐

  1. java中long类型的空值怎么表示,【关于long类型的转换】传进来的是String类型是或null或0如何转成long类型...

    [关于long类型的转换]传进来的是String类型是""或"null"或"0",怎么转成long类型? public long gLong ...

  2. 在远程调用别人接口的时候,传输参数一般都是String类型的字符串,改字符串可以是json格式的,也可以是xml格式的,那么问题来了

    在远程调用接口的时候,传输参数一般都是String类型的字符串,该字符串可以是json规则格式的,也可以是xml规则格式的,那么问题来了. 怎么将自己的对象,拼接成接口规定的格式?即将非格式化的数据( ...

  3. python从键盘获取数学表达式字符串_python – 数学表达式中String类型的字符串操作...

    想象一下 exp(49/200)+(x-49/200) 我想传递函数"roundn"的参数,无论是不是加法或减法的操作 所以我的表情变成了 roundn(exp(roundn(49 ...

  4. Bytes.toBytes(String类型的字符串) 将字符串转成字节数组的好处

    用户就是转换为byte数组之后就是二进制数据, 一般用来处理文件流操作,比如将数据存取到文件中 java中对于文件操作没有C#那么灵活,使用原生jdk的话操作文件都是以二进制形式进行的读/取.

  5. JS学习笔记(第五章)(String类型)

    1.对象创建 String类型是字符串的对象包装类型,可以像下面这样使用String构造函数来创建. var stringObject = new String("hello world&q ...

  6. JS String类型整理

    String类型是字符串的对象包装类型,包含字符串的所有方法,在js中有着广泛的使用,本文对字符串的使用方法做一些总结. 1.字符方法 用于访问字符串中特定字符的方法. 1.charAt() 接收一个 ...

  7. 逐梦C++之五:string类型

    1.String对象的定义及其初始化 C++提供string类型来代替C语言中以NULL结尾的char类型数组.string类型支持长度可变的字符串,并可以满足对字符串的一般应用. 例子: //1.几 ...

  8. 大数据Hive篇_埋点、日志数据清洗(string类型)

    实习期间处理业务需求不会的总结汇总,主要学习自花花里的前辈带教.与<Hive编程指南>一书,不足之处,望多多指正. 前言 实际的业务处理中,业务方提出的一个临时需求如果找不到对应的取数表, ...

  9. C++之string类型详解

    之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个泛型类出现,他集成的操作函数足以完成我们大多数情况下(甚 ...

最新文章

  1. python使用pandas计算dataframe中每个分组的分位数极差、分组数据的分位数极差(range)、使用groupby函数和agg函数计算分组的两个分位数
  2. cad能整体比例缩小吗_CAD中两个缩放的不同及其各自的应用
  3. RHEL(Red Hat Enterprise Linux)配置YUM源
  4. eclipse html插件_欲善事先利器——IDEA 插件篇
  5. Stateflow中的真值表注意事项
  6. ffmpeg系列-解复用流程解析
  7. linux c 笔记-1
  8. mongoDB的基本使用----飞天博客
  9. paip. lbmall V3.1.1 乐彼多用户商城系统的安全漏洞总结
  10. Excel导入SQL(VB.NET版)
  11. 测试显卡cpu中文软件,显卡信息检测工具(GPUinfo)
  12. sybase数据库导出mysql_sybase数据库备份的两种方式
  13. 线性代数的本质_01_向量、张成空间与基
  14. 2022-3-26 Java SE检测试卷
  15. 如何给 Windows 和 npm 加上 socks 代理
  16. mysql关系运算_数据库关系运算
  17. CSI笔记【8】:基于MUSIC Algorithm的DoA/AoA估计以及MATLAB实现
  18. Carbon Streaming提供股票和权证合并的最新信息,以寻求潜在的美国上市
  19. 我们诚心诚意的给射手座挑选了两款礼物,希望还来得及丨钛空智慧星球
  20. TiDB 在 2021 易车 818 汽车狂欢节的应用

热门文章

  1. Mercurial入门学习
  2. 【AR】Vuforia之unity3d 开发环境搭建
  3. Could not autowire field: private javax.servlet.http.HttpServletRequest
  4. 3.以太坊之秘钥文件
  5. 使用 js替换网页中的关键词为链接
  6. 电子发现与统一归档库
  7. Yii2使用Cookie的注意事项
  8. SDWAN分支解决方案:sdwan能用于多分支的企业吗?
  9. 支持企业互联网的正确故障恢复方法
  10. SD-WAN的四个价值—Vecloud微云