Подтвердить что ты не робот

Разница между <string> и <string.h>?

Почему этот код

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

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

#include <string>

но не с

#include <string.h>

?

4b9b3361

Ответ 1

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

Ответ 2

string.h - это заголовок C, а не заголовок С++, период!

Ответ 3

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

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

Редактировать комментарий Nicol Bolas ниже и немного поискового запроса:

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

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

Ответ 4

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

Ответ 5

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

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

У них действительно нет никаких отношений, кроме того, что они оба имеют дело со строками.

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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