56

今天早些时候(实际上是昨天,由于我的时区),我尝试在 Interview Street 上使用Visual Studio 2012 for C++ 进行编程面试(使用g++)。

简而言之,我在使用时遇到了几个编译错误1

#include <cstring>

这是由其中一个问题中的骨架代码提供的,在转向

#include <string>

所有编译错误都神奇地消失了。

但是,在提交到采访街后,我不得不补充c;否则我得到编译错误。

这是我第一次被非标准化咬伤......

我的问题是:什么里面<string><cstring>花了我(珍贵)半个多小时?


1对于任何好奇的人:

Visual Studio 2012 的一个错误using <cstring>是:

错误 C2338:C++ 标准不提供此类型的哈希。

c:\程序文件 (x86)\microsoft visual studio 11.0\vc\include\xstddef

可能string作为关键unordered_map

g++ 的一个错误 ifusing <string>是:

'strlen' 未在此范围内声明

4

3 回答 3

53

cstring头提供了处理 C 风格字符串的函数——以 null 结尾的字符数组。这包括 和 之类的strlen功能strcpy。它是 C 中经典string.h标头的 C++ 版本。

string文件提供了std::string类和相关的函数和操作符。

标题具有相似的名称,但除此之外它们并没有真正的相关性。它们涵盖不同的任务。

于 2012-10-10T17:03:51.347 回答
7

<cstring>具有来自 C 标头 string.h 的 C 字符串代码。C++有一个约定,其中C标头具有相同的基本名称,除了前导c和没有尾随.h。所有内容都在std::命名空间下可用。

<string>拥有标准库std::string及相关功能

于 2012-10-10T17:04:05.560 回答
5

在 C++ 中,您不会使用#include <somefile.h>,而是使用#include <somefile>. 现在 C++ 的字符串类<string><string.h>. C++ 用于“传统”c-包含文件。因此,<cstring><string>

http://www.cplusplus.com/reference/clibrary/cstring/

于 2012-10-10T17:03:51.580 回答