2012-02-13 90 views

回答

55
  • <string.h>包含像strcpystrlen對於C風格的null結尾的字符串老功能。
  • <string>主要包含std::stringstd::wstring和其他類。
+21

還應該注意的是,在C++中不推薦使用'string.h'。如果你需要包含的功能,你應該使用頭部'cstring'。這或多或少地完全繞過了「這兩者之間有什麼區別」的問題,因爲很明顯,一個來自C庫。 – 2012-03-11 20:53:40

10

string.h是C的頭文件,而string是C++的頭文件。

+1

''可以認爲C++頭文件也。 :) – iammilind 2012-02-13 09:06:46

+0

不是! 將與C++一起使用。 – 2015-09-07 20:32:04

19

string.h是C頭不是C++頭,週期!

+0

你的意思是,當我做幾個文件.h/.cpp時,我應該刪除.h或者你的答案只是爲了euh,就像sdk文件一樣? – Valmond 2012-02-13 09:05:34

+13

我認爲,最好換一種說法:'是C++頭文件,而不是C頭文件.' – iammilind 2012-02-13 09:06:11

15

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

<string>是C++字符串類 - 按照以下尼科爾流星錘評論http://www.cplusplus.com/reference/string/

編輯和一點谷歌搜索:

<cstring>通常會進口同樣的事情<string.h>但進入std命名空間。 <string.h>通常會將所有內容導入到全局名稱空間中。 它似乎取決於您使用的庫實現,雖然根據我的谷歌搜索。

我個人只使用<cstring>如果我需要C風格字符串助手。

+2

''不是''的同義詞。 'cstring'將東西放在'std'命名空間中(它也可能將它們留在'std'命名空間之外),而''則不會。 – 2012-02-13 08:53:29

+1

使用C風格'.h'頭文件在C++中不推薦使用。 – 2012-02-13 08:56:30

+0

@PrasoonSaurav要被棄用,它必須成爲標準的一部分,從來沒有過。 – 2012-02-13 09:52:55

8

<string.h>包含C語言庫的字符串函數。 strlenstrcmp

<string>包含std::basic_string的定義,其具有的typedef std::stringstd::wstring。這是不同的。

他們真的沒有任何關係,這一事實之外,他們都處理字符串。

2

我相信<string.h>只用於C和<string>的C++。所以包括string.h不會工作。

2

如上所述,string.hcstring是C頭(而cstring基本上是一個C++包裝器string.h),含有C字符串功能,這些功能是由char[]'\0'終止。你想使用C++類的字符串,其標頭是<string>

5

它們是完全不同的標題。

<string>是C++類string

<string.h> or <cstring>定義函數來操縱C字符串和數組

相關問題