首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 中 <string> 與 <string.h> 的區別詳解

     編輯:關於C++

常見錯誤現象

#include <string.h>
void main() {
    string aaa = "abcsd d";  // 錯誤:string 未定義
    printf(... strcmp(aaa, "abc") ...); // strcmp 需 char*
}

改用 <string> 卻發現 strcmp 不認識:

#include <string>
using namespace std;
void main() {
    string aaa = "abcsd d";
    printf(... strcmp(aaa, "abc") ...); // 錯誤:strcmp 找不到
}

根本原因

頭文件屬於內容命名空間
<string.h>C 標準庫C 風格字串函數(strcmp, strcpy 等)全域
<cstring>C++ 包裝 C 庫同 string.hstd
<string>C++ 標準庫std::string 類別std

關鍵點:<string> 不是 <string.h> 的「升級版」,兩者完全無關。C++ 為相容 C 保留了 string.h,並提供 cstring 放入 std;同時引入全新的 string 類別。

正確用法

方案一:同時包含

#include <cstring>  // 或 <string.h>
#include <string>
using namespace std; // 或 std::string, std::strcmp

方案二:純 C++ 風格

#include <string>
#include <iostream>
using namespace std;

int main() {
    string aaa = "abcsd d";
    if (aaa.find("abc") != string::npos)
        cout << "Found" << endl;
    else
        cout << "Not Found" << endl;
    return 0;
}

標準庫頭文件命名規則總覽

類別舊式(C++98 前)新式(標準)備註
C++ 庫<iostream.h><iostream>內容在 std,細節可能不同
C 庫<stdio.h><cstdio>內容在 std,舊式仍支援
字串處理<string.h><cstring> (C函數) / <string> (C++類)三者互不相容

經典笑談:標準庫有多大?

C++ 標準庫規格說明佔 300+ 頁,還不含 C 庫。大意味著功能多,開發時能借力越多。所有東西都在 namespace std,避免名稱衝突。舊式頭文件(.h 結尾)被「反對使用」但編譯器仍支援;C 頭文件為相容性保留。最大的挑戰是搞清字串頭文件:string.h (C函數)、cstring (C函數+std)、string (C++類+std)。搞懂這三個,其餘易如反掌。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved