【问题标题】:Difference between <string> and <string.h>?<string> 和 <string.h> 之间的区别?
【发布时间】:2012-03-04 16:28:19
【问题描述】:

这段代码怎么来的

std::map <std::string , int> m;
m["a"]=1;

编译(我使用的是 MSVC 2010)

#include <string>

但没有

#include <string.h>

?

【问题讨论】:

    标签: c++ string header header-files


    【解决方案1】:

    string.h 用于 c 兼容的 c++ 字符串类 string 用于纯 c++ 字符串类

    【讨论】:

      【解决方案2】:

      &lt;string.h&gt; 是 C 标准库头文件,而 &lt;string&gt; 是 cpp 实际上所有 c 标准头文件都有 .h 扩展名,而非 cpp 有 .h

      【讨论】:

        【解决方案3】:
        • &lt;string.h&gt; 包含诸如 strcpystrlen 之类的旧函数,用于 C 样式以空字符结尾的字符串。
        • &lt;string&gt;主要包含std::stringstd::wstring等类。

        【讨论】:

        • 还应注意,在 C++ 中不推荐使用 string.h。如果您需要其中包含的功能,您应该使用标题cstring。这或多或少完全绕过了“这两者有什么区别”的问题,因为很明显一个来自 C 库。
        【解决方案4】:

        &lt;string.h&gt; 是 cstring - http://www.cplusplus.com/reference/clibrary/cstring/

        &lt;string&gt; 是 c++ 字符串类 - http://www.cplusplus.com/reference/string/

        根据下面的 Nicol Bolas 评论和一些谷歌搜索进行编辑:

        &lt;cstring&gt; 通常会导入与&lt;string.h&gt; 相同的内容,但会导入std 命名空间。 &lt;string.h&gt; 通常会将所有内容导入全局命名空间。 根据我的谷歌搜索,它似乎取决于您使用的库实现。

        就我个人而言,如果我需要 C 风格的字符串助手,我只会使用 &lt;cstring&gt;

        【讨论】:

        • &lt;cstring&gt; 不是&lt;string.h&gt; 的同义词。 cstring 将内容放在 std 命名空间中(也可能将它们放在 std 命名空间之外),而 &lt;string.h&gt; 不会。
        • 使用 C 风格 .h 标头在 C++ 中已弃用。
        • @PrasoonSaurav 要被弃用,它必须从一开始就成为标准的一部分,但从来没有。
        • @PeterWood:查看附件 D [D.5] C++03。
        【解决方案5】:

        它们是完全不同的标题。

        &lt;string&gt; 是 C++ string

        &lt;string.h&gt; or &lt;cstring&gt; 定义了操作 C 字符串和数组的函数

        【讨论】:

          【解决方案6】:

          我相信&lt;string.h&gt; 仅用于 C,&lt;string&gt; 用于 C++。所以包括string.h 是行不通的。

          【讨论】:

            【解决方案7】:

            如上所述,string.hcstring 是 C 头文件(而 cstring 基本上是 string.h 的 C++ 包装器),包含 C 字符串的函数,这些函数是由 char[] 终止的 '\0'。您想使用 c++ 类字符串,其标头为 &lt;string&gt;

            【讨论】:

              【解决方案8】:

              &lt;string.h&gt; 包含 C 库字符串函数。 strlenstrcmp

              &lt;string&gt; 包含std::basic_string 的定义,其类型定义为std::stringstd::wstring。这就是区别。

              除了他们都处理字符串之外,他们真的没有任何关系。

              【讨论】:

                【解决方案9】:

                string.h 是 C 标头而不是 C++ 标头,句号!

                【讨论】:

                • 你的意思是当我做几个文件 .h/.cpp 我应该删除 .h 还是你的答案只是针对 euh,比如 sdk 文件?
                • 我觉得,最好换个说法:&lt;string&gt; is C++ header, not a C header.
                【解决方案10】:

                string.h是C的头文件,string是C++的头文件。

                【讨论】:

                • &lt;string.h&gt; 也可以被认为是 C++ 头文件。 :)
                • 不! 将与 C++ 一起使用。
                猜你喜欢
                • 2012-01-12
                • 2015-08-21
                • 1970-01-01
                • 2019-11-29
                • 2013-06-25
                • 1970-01-01
                • 1970-01-01
                • 2014-10-09
                相关资源
                最近更新 更多