string和string.h的区别


string和string.h的区别

文章插图
C++中string和string.h的作用和区别#include < string .h >void main(){string aaa = " abcsd d " ;printf( " looking for abc from abcdecd %s\n " ,(strcmp(aaa, " abc " )) ? " Found " : " Not Found " );}不能正确实行 , 提示说是string 类型没有定义而下面:#include < string >using namespace std;void main(){string aaa = " abcsd d " ;printf( " looking for abc from abcdecd %s\n " ,(strcmp(aaa, " abc " )) ? " Found " : " Not Found " );}这里的string编译器就认识了 , 可是strcmp就不认识了呢?一般一个C++的老的带“ 。h”扩展名的库文件 , 比如 iostream.h , 在新标准后的标准库中都有一个不带“ 。h”扩展名的 相对应 , 区别除了后者的许多改进之外 , 还有一点便是后者的东东都塞进了 “std”名字空间中 。但仅有string分外 。问题在于 C++要兼容C的标准库 , 而C的标准库里可巧也已经有一个名字叫做 “string.h”的头文件 , 包含一些常用的C字符串处置函数 , 比如楼 主说到的strcmp.这个头文件跟C++的string类半点联络也没有 , 所以并非的“晋级版别” , 他们是毫无 联络的两个头文件 。要抵达楼主的目的 , 比如一同:#include < string .h >#include < string >using namespace std;或许#include < cstring >#include < string >C++中string和string.h的作用和区别(2)笑谈(来自高 质量++)C++标准库很大 。非常大 。难以置信的大 。如何个大法?这么说 吧:在C++标准中 , 关于标准库的标准说明占了密密麻麻300 多页 , 这还不包含 标准C 库 , 后者只是"作为参看"(老实说 , 原文便是用的这个词)包 含在C++库中 。当然 , 并非总是越大越好 , 但在如今的情况下 , 确实越大越好 ,  因为大的库会包含许多的功用 。标准库中的功用越多 , 开发自个的应用程序时能 凭仗的功用就越多 。C++库并非供应了悉数(很明显的是 , 没有供应并发和图形 用户接口的支撑) , 但确实供应了许多 。几乎任何事你都可以求助于它 。在归纳 标准库中有些啥之前 , 需要介绍一下它是怎样组织的 。因为标准库中东西如此 之多 , 你(或象你相同的其他啥人)所选择的类名或函数名就很有可以和标准 库中的某个名字相同 。为了避免这种情况所构成的名字冲突 , 实习上标准库中的 悉数都被放在名字空间std 中(参见条款28) 。但这带来了一个新问题 。许多现 有的C++代码都依赖于运用了多年的伪标准库中的功用 , 例如 , 声明在 ,  , 等头文件中的功 能 。现有软件没有关于运用名字空间而进行描写 , 如果用std 来包装标准库致使 现有代码不能用 , 将是一种廉耻举动 。(这种釜底抽薪的做法会让现有代码的程 序员说出比"廉耻" 更尖锐的话)慑于被激怒的程序员会发作的损坏 力 , 标准委员会决定为包装了std 的那有些标准库构件创立新的头文件名 。生成 新头文件的方法只是是将现有C++头文件名中的 。h 去掉 , 方法本身不重要 , 正 如结尾发作的效果不一致也并不重要相同 。所以变成了 , 变成了 , 等等 。关于C 头文件 , 选用相同的方法 , 但在每个名字前还要添加一个c.所以C 的变成了 , 变成了 , 等等 。结尾一点是 , 旧的C++头文件是官方所敌对运用的(即  , 明晰列出不再支撑) , 但旧的C 头文件则没有(以坚持对C 的兼容性) 。实习 上 , 编译器制造商不会间断对客户现有软件供应支撑 , 所以可以估量 , 旧的C++ 头文件在将来几年内仍是会被支撑 。所以 , 实习来说 , 下面是C++头文件 的现状:旧的C++头文件名如将会继续被支撑 , 尽管 它们不在官方标准中 。这些头文件的内容不在名字空间std 中 。新的C++ 头文件如包含的根本功用和对应的旧头文件相同 , 但头文件的 内容在名字空间std 中 。(在标准化的过程中 , 库中有些有些的细节被修改了 ,  所以旧头文件和新头文件中的实体不一定完全对应 。)标准C 头文件如继续被支撑 。头文件的内容不在std 中 。具有C 库功用 的新C++头文件具有如这样的名字 。它们供应的内容和相应的旧C 头文件相同 , 只是内容在std 中 。所有这些初看有点怪 , 但不难习气它。最大的应战是把字符串头文件理理解:是旧的C 头 文件 , 对应的是依据char*的字符串处置函数;是对应 于旧C 头文件的std 版别;是包装了std 的C++头文件 ,  对应的是新的string 类 。

推荐阅读