<cstring>和<string>之间的区别

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

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

#include <cstring> 

这是由骨架代码提供的一个问题,然后转向

 #include <string> 

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

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

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

我的问题是: <string><cstring>把我(宝贵的)超过半小时?


1对于任何好奇的人:

如果using <cstring> ,Visual Studio 2012会出现一个错误:

错误C2338:C ++标准不提供这种types的散列。

c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ xstddef

可能是string作为unordered_map

如果using <string>由g ++引起的一个错误是:

“strlen”没有在这个范围内声明

cstring头部提供了处理C风格string的函数 – 以空字符结尾的字符数组。 这包括像strlenstrcpy这样的函数。 这是C语言经典的string.h头文件的C ++版本

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

标题的名称相似,但除此之外,它们并没有真正相关。 他们涵盖单独的任务。

<cstring>具有C头文件string.h中的Cstring代码。 C++有一个约定,其中C标头具有相同的基本名称,除了前导c和后缀.h 。 所有的内容都可以在std:: namespace下find。

<string>具有标准库的std::string和相关函数

在C ++中,您不会使用#include <somefile.h> ,而是使用#include <somefile> 。 现在C ++在<string>有它的string类,但是Cstring函数也是可用的,它们将在<string.h> 。 C ++使用“传统”c-包含文件。 因此, <cstring><string>

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