天天看點

C/C++學習筆記(十一)string和string.h檔案的差別#include <>和#include “”的差別.h檔案新标準庫檔案c字首檔案

在C/C++學習筆記(六)中記錄了頭檔案和源檔案的探讨,本文将繼續探讨更多的相關知識。

#include <>和#include “”的差別

當我們使用#include <檔案名>指令時,編譯器就到這個檔案夾裡去找對應的檔案。顯然,用這種寫法去包含一個我們自己編寫的頭檔案(不在那個Include檔案夾裡)就會出錯了。是以包含C++提供的頭檔案時,應該使用尖括号。

#include "檔案名"指令則是先在目前檔案所在的目錄搜尋是否有符合的檔案,如果沒有再到Include檔案夾裡去找對應的檔案。是以,無論這個檔案是C++提供的還是自己編寫的,使用#include "檔案名"指令一定是正确的。

.h檔案

.h檔案是c中的檔案,包括了操作C風格字元串的函數,如strcpy.strcmp,strcat,strlen等。C 語言裡沒有字元串這個資料類型,有的隻是字元指針或字元數組,C風格字元串也就是以'\0'結尾的字元序列。如下執行個體:

#include "stdafx.h"
#include <stdio.h>
#include <string.h>


int _tmain(int argc, _TCHAR* argv[]) {
	char d[20]="Golden Global";
	char *s=" View";
	strcat(d,s);
	printf("%s\n",d);
	getchar();
	return 0;  
}
           

新标準庫檔案

一般一個C++的老的帶“.h”擴充名的庫檔案,比如iostream.h,在新标準後的标準庫中都有一個不帶“.h”擴充名的相對應,差別除了後者的好多改進之外,還有一點就是後者的東東都塞進了“std”名字空間中。是以<string.h>是舊的C 頭檔案,對應的是基于char*的字元串處理函數;<string>

是包裝了std 的C++頭檔案,對應的是新的string 類(看下文)。是以c++中可以用<string.h>也可以用<string>,而c中隻能用<string.h>,一般說要用strcpy.strcmp,strcat,strlen之類的函數應該include <string.h>,要使用上一博文中介紹的string類應該include <string.h>,但是貌似<string>中已經有了include <string.h>,是以實際中隻需要include <string.h>,如下面執行個體:

#include "stdafx.h"
#include <string>
using namespace std ; 

int _tmain(int argc, _TCHAR* argv[]) {
	char d[20]="Golden Global";
	char *s=" View";
	string s1="hello";
	strcat(d,s);
	//strcat(s2,s);//此處報錯
	printf("%s\n",d);
	getchar();
	return 0;  
}
           

c字首檔案

在C++标準化之前,頭檔案有各種字尾名,如.h,.hpp,.hxx等,标準化之後規定頭檔案不帶字尾名,同時原來的C标準頭檔案都在前面加了個"c",于是原來C裡的string.h,在C++裡就變成了cstring,同樣的stdio.h,stdlib.h之類的都變成了cstdio、cstdlib一類。為了相容C,大部分C++編譯器都同時提供了這兩個版本的頭檔案,可以認為string.h和ctring是一回事,你可以看一下你的編譯器裡include目錄下的這兩個檔案,cstring隻是簡單的include了string.h而已。