1.strcmp函式
strcmp函式是比較兩個字串的大小,返回比較的結果。
原始碼: int strcmp(const char *str1, const char *str2) return *str1-*str2;}
一般形式是:
i=strcmp(字串1,字串2);
其中,字串1、字串2均可為字串常量或變數;i 是用於存放比較結果的整型變數。比較結果是這樣規定的:
①字串1小於字串2,strcmp函式返回乙個負值;
②字串1等於字串2,strcmp函式返回零;
③字串1大於字串2,strcmp函式返回乙個正值;那麼,字元中的大小是如何比較的呢?來看乙個例子。
實際上,字串的比較是比較字串中各對字元的ascii碼。首先比較兩個串的第乙個字元,若不相等,則停止比較並得出大於或小於的結果;如果相等就接著 比較第二個字元然後第三個字元等等。如果兩上字串前面的字元一直相等,像"disk"和"disks" 那樣, 前四個字元都一樣, 然後比較第 五個字元, 前乙個字串"disk"只剩下結束符'/0',後乙個字串"disks"剩下's','/0'的ascii碼小於's'的ascii 碼,所以得出了結果。因此無論兩個字串是什麼樣,strcmp函式最多比較到其中乙個字串遇到結束符'/0'為止,就能得出結果。
特別注意:strcmp(const char *s1,const char * s2)這裡面只能比較字串,不能比較數字等其他形式的引數。
注意:字串是陣列型別而非簡單型別,不能用關係運算進行大小比較。
if("abc">"def") /*錯誤的字串比較*/
if(strcmp("abc","def") /*正確的字串比較*/
2.strcpy函式
strcpy函式用於實現兩個字串的拷貝。一般形式是:
strcpy(字元中1,字串2)
其中,字串1必須是字串變數,而不能是字串常量。strcpy函式把字串2的內容完全複製到字串1中,而不管字串1中原先存放的是什麼。複製後,字串2保持不變。
strcpy(s1,s2);
strcpy函式的意思是:把字串s2中的內容copy到s1中,連字串結束標誌也一起copy.
這樣s1在記憶體中的存放為:ch\0;
在cout<
如果說s1的長度是6,那是錯誤的.你沒有弄清strlen與sizeof的意思。
strlen函式的意思是測試字串的字元長度,不含字串結束標誌的。
sizeof是個運算子,它的結果是字串在記憶體中的所佔位元組大小,它要把\0算進去的。
strcpy函式原型1
char * strcpy(char *a,char *b)
strcpy函式原型2
char *strcpy(char *strdest, const char *strsrc);//strdest為目標,strsrc為源
}//就這個演算法看來是多餘.
在這裡返回strdest的好處:返回strdest的原始值使函式能夠支援鏈式表示式,增加了函式的「附加值」。同樣功能的函式,如果能合理的提高可用性,自然就更加理想。
鏈式表示式的形式如:
int ilength=strlen(strcpy(tara,strb));
又如:char *stra=strcpy(new char[10],strb);
返回strsrc的原始值是錯誤的。其一,源字串肯定是已知的,返回它沒有意義。其二,不能支援形如第二例的表示式。其三,為了保護源字串,形參用const限定strstc所指的內容,把const char*作為char*返回,型別不符,編譯報錯。
例:
注意,由於字串是陣列型別,所以兩個字串複製不通過賦值運算進行。
t=s; /*錯誤的字串複製*/
strcpy(t,s); /*正確的字串複製*/
1。void *memset(void *s,int c,size_t n)
總的作用:將已開闢記憶體空間 s 的首 n 個位元組的值設為值 c。
2。例子
#include
void main()
3。memset() 函式常用於記憶體空間初始化。如:
char str[100];
memset(str,0,100);
4。memset()的深刻內涵:用來對一段記憶體空間全部設定為某個字元,一般用在對定義的字串進行初始化為『 』或『/0』;例:char a[100];memset(a, '/0', sizeof(a));
memcpy用來做記憶體拷貝,你可以拿它拷貝任何資料型別的物件,可以指定拷貝的資料長度;例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),會造成b的記憶體位址溢位。
strcpy就只能拷貝字串了,它遇到'/0'就結束拷貝;例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字串長度(第乙個『/0』之前)是否超過50位,如超過,則會造成b的記憶體位址溢位。
5.補充:一點心得
memset可以方便的清空乙個結構型別的變數或陣列。
如:struct sample_struct
;對於變數
struct sample_strcut sttest;
一般情況下,清空sttest的方法:
sttest.csname[0]='/0';
sttest.iseq=0;
sttest.itype=0;
用memset就非常方便:
memset(&sttest,0,sizeof(struct sample_struct));
如果是陣列:
struct sample_struct test[10];
則memset(test,0,sizeof(struct sample_struct)*10);
6。strcpy
原型:extern char *strcpy(char *dest,char *src);
用法:#i nclude
功能:把src所指由null結束的字串複製到dest所指的陣列中。
說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。
返回指向dest的指標。
memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#i nclude
功能:由src所指記憶體區域複製count個位元組到dest所指記憶體區域。
說明:src和dest所指記憶體區域不能重疊,函式返回指向dest的指標。
memset
原型:extern void *memset(void *buffer, int c, int count);
用法:#i nclude
功能:把buffer所指記憶體區域的前count個位元組設定成字元c。
說明:返回指向buffer的指標。
C語言中常用的庫函式
1 記憶體設定 函式原型 void memset void point,char value,unsigned length 函式功能 將point所指向的記憶體空間的前length個位元組設定為value值。引數介紹 value 需要設定的數值 length 設定快取的位元組個數 返回值返回poi...
C語言中常用的庫函式
c語言中常用的標頭檔案如下 斷言 浮點數運算 本土化 數學函式 訊號 可變引數列表 輸入和輸出 實用功能 字串函式 時間和日期函式 輸入和輸出 標頭檔案定義了用於輸入和輸出的函式 型別和巨集。最重要的型別是用於宣告檔案指標的file。另外兩個常用的型別是 size t和fpos t,size t是由...
C語言中的函式
在對c語言有過一定的了解之後,我們都會涉及到乙個概念 函式。那麼,什麼是函式呢?首先,我們來看一段 includeint max int x,int y int main 在上面的程式中,我們將引數a,b傳入到函式max之中,最後求出結果並返回,那麼,這樣寫的好處是什麼呢?我們為什麼要使用函式來實現...