1. strlen(char const* s);
函數傳入的是c風格字符串(即以‘\0’結尾的字符數組),返回的長度為size_t(即unsigned int),其長度不包括'\0'。
2. strcpy(char* dest, char const* source);
dest:目標指針;
source:是源指針,傳入的必須是c風格字符串或者字符數組。
返回值: dest指針
注意:1. 該函數會將包括'\0'在內的source全部拷貝到dest。如果char* source="abcd"; dest為char[],則dest應該定義為char[5];
2. src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。
3. C語言中不支持用賦值符號“=”直接將一個字符數組賦值給另一個字符數組。因為C語言不支持運算符重載。故而必須用strcpy操作。
3. strncpy(char* dest, char const* source, size_t n);
n代表可以指定字符個數進行賦值。
功能:將字符串source中最多n個字符復制到字符數組dest中(它並不像strcpy一樣遇到NULL才停止復制,而是等湊夠n個字符才開始復制),返回指向dest的指針。要求:如果n > dest串長度,dest棧空間溢出產生崩潰異常。該函數注意的地方和strcpy類似,但是n值需特別注意。
1)src串長度<=dest串長度,(這里的串長度包含串尾NULL字符)
如果n=(0, src串長度),src的前n個字符復制到dest中。但是由於沒有NULL字符,所以直接訪問dest串會發生棧溢出的異常情況。一般建議采取memset將dest的全部元素用null填充,如:memset(dest,0,8)(8為從dest起始地址開始前8個位置填充null,dest可以為字符指針和數組名)。
注意:char* p="abc"; char ch[5]; sizeof(p)為4(包含null)(有些編譯器不行),sizeof(ch)為5。
這樣:
如果n = source串長度,與strcpy一致。
如果n = dest串長度,[0,src串長度]處存放於dest字串,(src串長度, dest串長度]處存放NULL。
2)source串長度>dest串長度
如果n =dest串長度,則dest串沒有NULL字符,會導致輸出會有亂碼。如果不考慮source串復制完整性,可以將dest最后一字符置為NULL。
所以,一般把n設為dest(含null)的長度(除非將多個source復制到dest中)。當n=dest串長度時,定義dest為字符數組,因為這時沒有null字符拷貝。
4. const char *c_str();
c_str()函數是c++中屬於string類的成員函數,返回一個指向正規C字符串的指針常量, 內容與本string串相同.(其實它指向的是string對象內部真正的char緩沖區),所以返回const,以防止用戶的修改。
注意:(如下這段內容參考 http://www.cnblogs.com/qlwy/archive/2012/03/25/2416937.html)
1)c_str()生成一個const char*指針,指向以空字符終止的數組,但這個數組的數據是臨時的(如前所述,其實它指向的是string對象內部真正的char緩沖區),當有一個改變這些數據的成員函數被調用后,其中的數據就會失效。看下例:
const char* c; string s="1234"; c = s.c_str(); cout<<c<<endl; //輸出:1234 s="abcd"; cout<<c<<endl; //輸出:abcd
上面如果繼續用c指針的話,導致的錯誤將是不可想象的。就如:1234變為abcd。因此應該把原string的數據復制到用戶自己可以管理的內存中。怎么把數據復制出來呢?這就要用到strcpy等函數(推薦)。
//const char* c; //① //char* c; //② //char c[20]; char* c=new char[20]; string s="1234"; //c = s.c_str(); strcpy(c,s.c_str()); cout<<c<<endl; //輸出:1234 s="abcd"; cout<<c<<endl; //輸出:1234
注意:不能再像①一樣將c聲明為const char*類型的指針了,因為c要接收strcpy的值;也不能②所示,使用了未初始化的局部變量“c”,運行會出錯的 。
2)c_str()返回一個客戶程序可讀不可改的指向字符數組的指針,不需要手動釋放或刪除這個指針。
3) data():與c_str()類似,但是返回的數組不以空字符終止。
5. int strcmp ( const char * str1, const char * str2 );
比較兩個字符串數組的大小。規則如下:
①字符串1小於字符串2,strcmp函數返回一個負值;
②字符串1等於字符串2,strcmp函數返回零;
③字符串1大於字符串2,strcmp函數返回一個正值;
實際比較時,按字符位置從小到大依次比較各個字符;直到第一對不相等的字符,或者任何一個字符數組遇到'\0'。注意:
if("ABC">"DEF") /*錯誤的字符串比較*/ if(strcmp("ABC","DEF") /*正確的字符串比較*/
6. char *strcat(char *dest,char *src);
strcat用於連接字符串,返回結果的頭指針。
參考如下兩篇文章:
http://www.cnblogs.com/clover-toeic/p/3885181.html
http://blog.csdn.net/smf0504/article/details/52055971