C語言字串標頭檔案string.h中的strlen,strcat,strcpy,strncpy,strcmp,strlwr,strupr函式
前言
- 本博文內容基於VC6.0++,
2.本博文主要介紹包含在string.h中的幾個字串相關的函式;
strlen(字串陣列名)
字串有效長度函式;
返回值:整型
功能:用來測量一個字串的有效長度(所謂有效,就是從字串中的第一個字元開始,一直到第一個空字元’\0’為止(不包括這個空字元)所佔的位元組數);
操作過程:
舉例:
#include <stdio.h>
#include <string.h>
/*注意:*/
//1. VC6.0中,編譯器為一個字元型資料分配一個位元組;
//2. 編譯器會為每個字串的結尾分配結束標誌,也就是空字元'\0';
void main()
{
char a[] ={"I Love You"};
char b[] = {"I Love You\0Holle"};
printf("字串a的有效字元長度為:%d\n",strlen(a));
printf("字串b的有效字元長度為:%d\n",strlen(b));
}
執行:
注意:字串的有效長度歸有效長度,但並不代表b字串中第一個’\0’後的字元都是沒有的;
strcat(字串陣列名1,字串陣列名2)
字串拼接函式;
返回值:字元指標
功能:將字串2的有效字元拼接在字串1後,並且拼接時字串1的結束標誌被字串2的第一個字元替代;
注意:
1.拼接函式執行完畢後,字串2並沒有改變,字串1改變,最後字串1等於原字串1+字串2;
2.定義字串1的時候,陣列長度必須大於字串1+字串2的長度;所以字串1在定義的時候如果知道後來要用strcat函式,那麼必須定義足夠的長度;(然而在實際操作工程中,定義第一個字串的長度可能會被誤操作,使得字串1的長度不夠容納再放進來的字串2,這是程式出現了語法上的錯誤,但是,編譯器可能檢查不出來,根據每個電腦的硬體,作業系統,編譯環境的不同,或許我們感受不到這個錯,但是實際上這個問題是真實存在的,這個一定要了解,不然編寫大型程式的時候可能會把錯誤表現出來;)
執行操作:
舉例:
#include <stdio.h>
#include <string.h>
void main()
{
char a[30]="I Love China";
char b[]="I Love You";
printf("拼接之前a佔用的記憶體大小:%d\n",sizeof(a));
printf("拼接後的字串是:%s\n",strcat(a,b));
printf("拼接後的a是:%s\n",a);
printf("拼接後的b是:%s\n",b);
printf("拼接後a的第15位字元是:%c\n",a[14]);
printf("拼接後a的第17位字元是:%c\n",a[16]);
printf("拼接之後a佔用的記憶體大小:%d\n",sizeof(a));
}
執行:
strcpy(字串陣列名1,字串陣列名2)
複製字串;
功能:將字串2內的字元複製並覆蓋到字串1;
返回值:字元指標
定義:strcpy(字串1,字串2); 含義:將字串2的字元,全部把字串1的內容給覆蓋(包括結束標誌和空字元)
注意:
1. 字串1的定義空間也必須要大於加上字串2儲存空間;不然程式可能報錯或者出現潛在錯誤;
2. 複製函式執行完畢後,原字串1的有效字元就被字串2全部替換掉,並且執行後的字串1的有效字串等於字串2;
執行原則:
情況1:字串2的有效字元大於字串1的有效字元
情況2:字串2的遊俠字元小於字串1的有效字元(要切記這個原理)
注意:在對上圖的複製後的函式進行輸出時,若用%s輸出,第一個空字元後的字元將不會被輸出;如果用字元遍歷%c輸出,則可以全部輸出;
舉例:
#include <stdio.h>
#include <string.h>
void main()
{
char a[30]="I Love You";
char b[]="I Love China";
printf("a的最初長度為:%d\na字串是:%s\n",sizeof(a),a);
printf("b的最初長度為:%d\nb字串是:%s\n",sizeof(b),b);
printf("將b賦值給a後的字串長度為:%d\n字串是:%s\n",sizeof(a),strcpy(a,b));
printf("賦值後a的長度為:%d\na字串是:%s\n",sizeof(a),a);
printf("賦值後b的長度為:%d\nb字串是:%s\n",sizeof(b),b);
}
執行結果:
strncpy(字串名1,字串名2,常量表達式n);
前n項選擇複製函式;
功能:賦值字串2的前n個字元給字串1的前n個;
返回值:字元指標
定義:strncpy(字串名1,字串名2,常量表達式n);
注意:
1. 這個函式和strcpy是類似的,主要功能都是類似的;但是strcpy是全複製,strncpy是前n項賦值;
2. 注意n的值不要大於字串2或字串1字元長度;
操作過程;
舉例:
#include <stdio.h>
#include <string.h>
void main()
{
char a[] = "I Love China";
char b[] = "It is cat";
printf("複製後的陣列為:%s\n",strncpy(a,b,4));
printf("複製後a的字串是:%s\n",a);
}
執行結果:
strcmp(字串名1,字串名2)
字串比較函式
返回值:
1,說明字串1>字串2;
0,說明字串1==字串2;
-1,說明字串1<字串2;
功能:比較兩個字串的大小;
比較的方式:將字串1和字串2中下標相同的字元從0下標開始逐個比較;
比較的依據:ASCII表;(符號在表中的編碼越大,字元就越大)
注意:
1. 函式執行完畢後兩個字串並沒有發生改變;
操作過程:
舉例:
#include <stdio.h>
#include <string.h>
void main()
{
char a[] = "I Love China";
char b[] = "It is cat";
printf("比較結果是:%d\n",strcmp(a,b));
}
執行結果:
strlwr(字串名)和strupr(字串名);
大寫轉小寫轉換符和小寫轉大寫轉換符;
返回值:字元指標
功能:strlwr將字串內的大寫字母全部轉化為小寫;
strupr將字串內的小寫字母全部轉化為大寫字母;
注意:轉化後的字串將發生改變;
舉例:
#include <stdio.h>
#include <string.h>
void main()
{
char a[] = "I Love China";
char b[] = "It is cat";
printf("a轉換成大寫:%s\n",strupr(a));
printf("b轉換成小寫:%s\n",strlwr(b));
printf("轉化後的a是:%s\n",a);
printf("轉化後的b是:%s\n",b);
}
執行結果: