#include 與#include 的區別


為什么下面這段代碼
#include <string.h>

void main()
{
     string aaa= "abcsd d";
     printf("looking for abc from abcdecd %s\n",
         (strcmp(aaa,"abc")) ? "Found" : "Not Found");

}
不能正確執行,說是string類型沒有定義
而下面:
#include <string>

using namespace std;
void main()
{
     string aaa= "abcsd d";
     printf("looking for abc from abcdecd %s\n",
         (strcmp(aaa,"abc")) ? "Found" : "Not Found");
}
這里的string編譯器就認識了,但是strcmp就不認識了呢?
---------------------------------------------------------------

一般一個C++的老的帶“.h”擴展名的庫文件,比如iostream.h,在新標准后的標准庫中都有一個不帶“.h”擴展名的相對應,區別除了后者的好多改進之外,還有一點就是后者的東東都塞進了“std”名字空間中。

但唯獨string特別。
問題在於C++要兼容C的標准庫,而C的標准庫里碰巧也已經有一個名字叫做“string.h”的頭文件,包含一些常用的C字符串處理函數,比如樓主提到的strcmp。
這個頭文件跟C++的string類半點關系也沒有,所以<string>並非<string.h>的“升級版本”,他們是毫無關系的兩個頭文件。
要達到樓主的目的,比如同時:
#include <string.h>
#include <string>
using namespace std;
或者
#include <cstring>
#include <string>

其中<cstring>是與C標准庫的<string.h>相對應,但裹有std名字空間的版本。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM