簡單記錄c語言對字串的操作函式,難點在於字串結束符的處理和寬字串的處理
c++也使用char, wchar_t表示字元型和寬字元型
本地為中文作業系統
處理多位元組字串:
處理字串的函式基本都在
char *pmultichar = "這是ansi字串";
size_t strlen(const char *s1)
int nlen = strlen(pmultichar); //nlen為14,不包括字串結束符0;在ansi編碼下,每個中文佔兩個位元組
函式行為:返回從pmultichar到結束符0的位元組數,不包括結束符0;
行為備註:strlen會從pmultichar一直遍歷直到出現0
注意事項:使用者要保證pmultichar以0結束;不要應用於unicode字串,裡面0多,返回結果不正確,unicode串用wcslen
char *strcpy(char *sdest, const char *ssrc)
char *pcopybuffer = new char[strlen(pmultichar) + 1];
strcpy(pcopybuffer , pmultichar);
行為備註:strcpy不管pcopybuffer是否分配了足夠的空間,會一直拷貝直到遇到pmultichar的結束符0,然後拷貝0,結束
正確呼叫:使用者要保證pmultichar要正確的以0結束,否則函式會一直拷貝直到遇到0;同時要保證pcopybuffer有足夠的空間儲存pmultichar,包括結束符0,否則會越界拷貝(直到拷貝完結束符0)
異常備註:如果pcopybuffer分配的空間比strlen(pmultichar)+1大,strcpy拷貝完後也不管剩下的部分。
char *strncpy(char *sdest, const char *ssrc, size_t copysize)
char *pncopybuffer = new char[strlen(pmultichar)];
strncpy(pncopybuffer, pmultichar, strlen(pmultichar) - 1); //沒有拷貝最後乙個位元組
*(pncopybuffer + strlen(pmultichar) - 1) = 0; //末尾加結束符0
函式行為:strncpy拷貝copysize個位元組到sdest
行為備註:從ssrc開始,無論如何都會拷貝copysize個位元組!
正確呼叫:pncopybuffer分配的長度要包括結束符0,比如想拷貝5個位元組,則分配6個位元組,最後手動加0;copysize不要超過sdest分配的長度-1
異常備註:ssrc的長度和copysize之間的關係不重要,因為如果copysize大於要拷貝的字串長度,則結束符0後面用0補齊,如果copysize小,則只拷貝copysize個位元組;關鍵在於sdest分配的長度和copysize的關係,如果sdest空間比copysize大,則拷貝完copysize個位元組後,剩下的空間不動,如果sdest分配的空間沒有copysize大,拷貝會越界;注意sdest分配的空間至少比copysize大1,用來新增結束符0
int strcmp(const char *s1, const char *s2)
函式行為:比較字串s1和s2的大小。如果s1大,返回正數(1);相等,返回0;s1小,返回負數(-1)
void *menset(void *s1, int val, size_t size)
函式行為:把從s1開始的size個位元組置為val。如果size比s1分配的空間大,則會越界操作,所以注意size值不要超過s1分配的大小
int printf(const char * format, ...)
處理寬字串
wchar_t定義在中,用來儲存寬字元;寬字串有關操作函式大都也在中
l巨集定義可以把字串表示為寬字元和寬字串
wchar_t *pwidechar = l"這是unicode字串";
size_t wcslen(const wchar_t *s1)
int nlen = wcslen(pwidechar); //nlen為12 表示字元數,不包括結束符00
函式行為:返回從pwidechar到結束符00的字元數,不包括結束符00;遇到單個0不會結束
行為備註:由於unicode編碼使用雙位元組表示字元,所以可以算出字元數;strlen無法算出字元數,只能算出位元組數,因為多位元組編碼使用乙個或兩個位元組表示乙個字元
正確呼叫:保證s1是unicode字串;並以00結束
wchar_t*wcscpy(wchar_t*sdest, constwchar_t*ssrc)
wchar_t *pwidebuffer = new wchar_t[wcslen(pwidechar) + 1];
wcscpy(pwidebuffer, pwidechar);
函式行為:與strcpy類似,把ssrc按字元拷貝到sdest,直到遇到結束符00,拷貝00,結束
行為備註:wcscpy不管sdest是否分配了足夠的空間;動態分配陣列的中括號裡填的是字元數
正確呼叫:ssrc要以00結尾;sdest要分配足夠裝下ssrc及結束符00的空間
wchar_t*wcsncpy(wchar_t*sdest, constwchar_t*ssrc, size_t copysize)
wchar_t *pwidebuffer = new wchar_t[wcslen(pwidechar) + 1];
wcsncpy(pwidebuffer, pwidechar, wcslen(pwidechar));
*(pwidebuffer + wcslen(pwidechar)) = 0;
函式行為與strncpy相似,注意copysize為字元數;結束符為00;指標每次移動2個位元組;賦值=0把該字元(兩個位元組)置0
int wcscmp(const wchar_t *s1, const wchar_t *s2)
函式行為:比較字串s1和s2的大小。如果s1大,返回正數(1);相等,返回0;s1小,返回負數(-1)
void *wmemset(wchar_t *s1, wchar_t val, size_t size)
函式行為:把從s1開始的size個字元置為val。如果size比s1分配的空間大,則會越界操作,所以注意size值不要超過s1分配的大小;val是wchar_t型別,如3,l'漢',『a』等
int wprintf(const wchar_t *format, ...)
c語言中字串操作的函式
include include 務必包含這個標頭檔案 void str cat char str1,char str2 void str cpy char str1,char str2 void str n cpy char str1,char str2,int n void str cmp cha...
C語言中基本的字串操作函式
把字串s2複製到s1,直到遇到s2中的 0 為止。s1要有足夠的空間容納s2,且s1中的內容被覆蓋,函式返回的是s1。s1必須是字元型陣列基位址,s2可以是字元陣列名或字串常量。將字串s2接到字串s1後面,陣列s1要足夠大。引數s1必須是字元陣列基位址,引數s2可以是字元陣列名或字串常量。引數s1和...
C語言中的字串函式
一.ansi c標準中的字串函式 使用時要包含標頭檔案 string.h 1.strcpy 宣告 char strcpy char dest,char src 功能 把src指向的字串複製到dest中 返回值 dest 說明 目的指標dest一定是已經分配記憶體的指標,dest和src所指記憶體區域...