为什么有这么多string相关的头文件呢,小编秦始皇今天带大家看一下:

1.[string.h]

  定义如下:“C语言标准库中一个常用的头文件,在使用到字符数组时需要使用。[string.h] 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。常用函数有strlen、strcmp、strcpy等等”。

  注意:[string.h] 是c语言的东西,并无类,所以不能 string s1,只能用char。

2.[cstring]

  在C++标准化(1998年)过程中,为了兼容以前,标准化组织将所有这些文件都进行了新的定义,加入到了标准库中,加入后的文件名就新增了一个"c"前缀并且去掉了.h的后缀名,所以[string.h]头文件成了[cstring]头文件。但是其实现却是相同的或是兼容以前的。

  注意:这个就是C艹版的[string.h],与前者包含的内容是一样的,只是这样写说明原头文件也是标准程序库(即裹有std名字空间)的一份子,因此可以与前者等价使用。

3.[string]

  在C语言中,一般使用字符数组char str[]存放字符串,但是这样很麻烦(我就不喜欢用)。因此在C++在STL中加入string类型,并对字符串常用的功能进行了封装(例如insert()、length()\size()等)。

  注意:这个头文件跟C++的string类半点关系也没有,所以[string]并非[string.h]的“升级版本”,他们是毫无关系的两个头文件;使用时同时还要在头文件下添加using namespace std

  最后总结一下:1和2一样,无非是写法风格问题,而3则不同,其中包含了标准模板库里的许多方便的函数,因此在使用string类时要用3,其余情况则可只使用1或2。

  好的,相信大家都知道这三者的区别了,我们下期再会。

震惊!<string.h>、<cstring>和<string>竟然可以这么用!的更多相关文章

  1. 头文件 string.h cstring string 区别

    1.#include <cstring>   //不可以定义string s:可以用到strcpy等函数using   namespace   std; #include <stri ...

  2. string string.h cstring 区别

    c++中 string与string.h 的作用和区别 #include  <string.h>  void  main()  {        string  aaa=  "a ...

  3. string string.h=cstring=str

    <string.h> <string.h>是C版本的头文件,包含比如strcpy.strcat之类的字符串处理函数. <cstring> 在C++标准化(1998年 ...

  4. 【转】<string> <string.h> <cstring>的区别

    #include < string.h > void main() { string aaa = " abcsd d " ; printf( " lookin ...

  5. C++中cstring.h和string.h的区别

    转载:https://blog.csdn.net/qian_chun_qiang/article/details/80648691 1.string与cstring有什么区别 <string&g ...

  6. 字符串操作函数<string.h>相关函数strcpy,strcat,等源码。

    首先说一下源码到底在哪里找. 我们在文件中包含<cstring>时,如果点击右键打开文档, 会打开cstring,我们会发现路径为: D:\Program Files\visual stu ...

  7. 转载:C/C++关于string.h头文件和string类

    学习C语言时,用字符串的函数例如stpcpy().strcat().strcmp()等,要包含头文件string.h 学习C++后,C++有字符串的标准类string,string类也有很多方法,用s ...

  8. VC CString,int,string,char*之间的转换

    CString转string : CString strMfc = "test"; std::string strStr; strStr = strMfc.GetBuffer(); ...

  9. <string>和<string.h>的区别

    转自:http://blog.csdn.net/houjixin/article/details/8648969 在C++开发过程中经常会遇到两个比较容易混淆的头文件引用#include<str ...

  10. <string> <string.h>

    在C++开发过程中经常会遇到两个比较容易混淆的头文件引用#include<string.h> 和 #include<string>,两者的主要区别如下: #include< ...

随机推荐

  1. 面向对象编程(C++篇4)——RAII

    目录 1. 概述 2. 详论 2.1. 堆.栈.静态区 2.2. 手动管理资源的弊端 2.3. 间接使用 2.4. 自下而上的抽象 3. 总结 4. 参考 1. 概述 在前面两篇文章<面向对象编 ...

  2. vue-router的原理,例如hashhistory和History interface?

    vue-router用法:在router.js或者某一个路由分发页面配置path, name, component对应关系 每个按钮一个value, 在watch功能中使用this.$router.p ...

  3. 你了解过Servlet3.0吗?

    Servlet3.0相对于Servlet2.0来说最大的改变是引入了Annotation标注来取代xml配置,用于简化web应用的开发和部署.最主要几项特性: 1. 新增的注解支持:该版本新增了若干注 ...

  4. MySQL 支持事务吗?

    在缺省模式下,MySQL 是 autocommit 模式的,所有的数据库更新操作都会即时 提交,所以在缺省情况下,MySQL 是不支持事务的. 但是如果你的 MySQL 表类型是使用 InnoDB T ...

  5. 读懂jstack

    1 jstack jstack是JDK自带的一种线程栈跟踪工具,用于生成java虚拟机当前时刻线程快照.在定位线程卡顿.死锁.block等原因的时候非常有用.使用方法是: jstack [-l] pi ...

  6. 在java web工程中jsp页面中使用kindeditor

    在这之前我们用Notepad++写过kindeditor 在Java web工程里也差不多 首先我们复制之前的thml代码粘贴到工程里 然后把样式也复制进去 然后就可以运行了

  7. linux java7升级到java8

    转自:https://blog.csdn.net/u010199866/article/details/81744382 linux java7升级到java8   版权 1.第一步先卸载所有老的jd ...

  8. vue 3d轮播组件 vue-carousel-3d

    开发可视化项目时,需要3d轮播图,找来找去发现这个组件,引用简单,最后实现效果还不错.发现关于这个组件,能搜到的教程不多,就分享一下我的经验. 插件github地址:https://wlada.git ...

  9. Redis++:Redis做分布式锁真的靠谱吗

    Redis做分布式锁真的靠谱吗 Redis的分布式锁可以通过Lua进行实现,通过setnx和expire命令连用的方式 || 也可以使用高版本的方法同时设置失效时间,但是假如在以下情况下,就会造成无锁 ...

  10. 传染病模型(SIR模型)