Разница между <string>и <string.h>? - PullRequest
44 голосов
/ 13 февраля 2012

Как получается этот код

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

компилируется с (я использую MSVC 2010)

#include <string>

но не с

#include <string.h>

Ответы [ 9 ]

66 голосов
/ 13 февраля 2012
  • <string.h> содержит старые функции, такие как strcpy, strlen для строк с завершающим нулем в стиле C.
  • <string> в основном содержит std::string, std::wstring и другие классы.
17 голосов
/ 13 февраля 2012

string.h - это заголовок C, а не заголовок C ++, точка!

16 голосов
/ 13 февраля 2012

<string.h> cstring - http://www.cplusplus.com/reference/clibrary/cstring/

<string> - это класс строки c ++ - http://www.cplusplus.com/reference/string/

Редактировать в соответствии с комментарием Николь Болас ниже и немного погуглить:

<cstring> обычно импортирует те же вещи, что и <string.h>, но в пространство имен std. <string.h> обычно импортирует все в глобальное пространство имен. По-моему, это зависит от используемой вами реализации библиотеки, в соответствии с моим поиском в Google.

Лично я использую <cstring> только в том случае, если мне нужны строковые помощники в стиле C.

10 голосов
/ 13 февраля 2012

string.h - это заголовочный файл C, а string - это заголовочный файл C ++.

8 голосов
/ 13 февраля 2012

<string.h> содержит строковые функции библиотеки C. strlen, strcmp и т. Д.

<string> содержит определение для std::basic_string, которое имеет typedefs std::string и std::wstring. В этом разница.

Они действительно вообще не имеют никакого отношения, за исключением того факта, что они оба имеют дело со строками.

5 голосов
/ 13 февраля 2012

Это совершенно разные заголовки.

<string> - это C ++ string, класс

<string.h> or <cstring> определяет функции для работы со строками и массивами C

2 голосов
/ 13 февраля 2012

Как указано, string.h и cstring - это заголовки C (в то время как cstring - это, в основном, оболочка C ++ для string.h), содержащие функции для строк C, которые char[] оканчиваются на '\0'.Вы хотите использовать строку класса c ++ с заголовком <string>.

2 голосов
/ 13 февраля 2012

Я считаю, что <string.h> просто используется для C и <string> для C ++. Так что включая string.h не получится.

0 голосов
/ 14 марта 2019

<string.h> - это заголовок стандартной библиотеки C, тогда как <string> - это cpp, фактически все стандартные заголовочные файлы c имеют расширение .h, а не cpp - .h.

...