1. 程式人生 > >C語言字串標頭檔案string.h中的strlen,strcat,strcpy,strncpy,strcmp,strlwr,strupr函式

C語言字串標頭檔案string.h中的strlen,strcat,strcpy,strncpy,strcmp,strlwr,strupr函式

前言

  1. 本博文內容基於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);

}

執行結果:
這裡寫圖片描述