C語言 字串函式總結

2021-10-14 07:52:17 字數 4304 閱讀 7422

陣列和指標

陣列和指標的區別

字串陣列

指標和字串

字串輸入

scanf()函式

字串輸出

字串函式

ctype.h中的函式

寫在前面:本文基於上課所用ppt及《c primer plus》第6版,**也是多源於此。字串函式一直是本人弱項,終於熬過了考試周,來總結一下為c語言的期末機試做準備。

字串:以==空字元(\0)==結尾的char型別陣列。

put()函式只顯示字串,自動在顯示的字串末尾加上換行符。

#include

#define msg "i am a symbolic string constant."

#define maxlength 81

int main (

void

)

結果為:

字串的初始化不需要使用{}

字串常量屬於靜態儲存類別(static storage class),如果在函式中使用字串常量,該字串只會被儲存一次,在整個程式的生命期內存在,即使函式被呼叫多次。雙引號括起來的內容被視為指向該字串儲存位置的指標。這類似於把陣列名作為指向該陣列位置的指標。

定義字串陣列時,必須讓編譯器知道需要多少空間。一種方法是用足夠空間的陣列儲存字串。

字串 vs 字元陣列
const

char m1[40]

=" limit yourself."

;const

char m2[40]

= " 'l'

,'i'

,'m'

,'i'

,'t'

,' '

,'y'

,'o'

,'u'

,'r'

,'s'

,'e'

,'l'

,'f'

,'.'

,'\0'};

const

char m3[40]

= " 'l'

,'i'

,'m'

,'i'

,'t'

,' '

,'y'

,'o'

,'u'

,'r'

,'s'

,'e'

,'l'

,'f'

,'.'

};

m1,m2是字串,m3是字元陣列,因為末尾無』\0』。

制定陣列大小時,要確保陣列的元素個數至少比字串長度多1。所有未被使用的元素都被自動初始化為0(char形式的空字元)。

省略陣列初始化宣告中的大小,編譯器會自動計算陣列的大小。

const

char m1=

" limit yourself."

;

通常,字串都作為可執行檔案的一部分儲存在資料段中。當把程式載入記憶體時,也載入了程式中的字串。字串儲存在靜態儲存區(static memory)中。但是,程式在開始執行時才會為該陣列分配記憶體。此時,才將字串拷貝到陣列中。此時字串有兩個副本,乙個是在靜態記憶體中的字串字面量,另乙個是儲存在ar1陣列中的字串。

在陣列形式中,ar1是位址常量,…

char

*name;

scanf (

"%s"

, name)

;

可能會通過編譯(可能給出警告),讀入name時可能會擦寫掉程式中的資料或**,從而導致程式異常終止。因為scanf()要把資訊拷貝至引數指定的位址上,而此時該引數是個未初始化的指標,name可能指向任何地方。

最簡單的方法是,在宣告時顯式指明陣列的大小;

scanf()函式和%s轉換說明只能讀取乙個單詞,遇空格停止。

gets()讀取整行輸入,直至遇到換行符,然後丟棄換行符,儲存其餘字元,並在這些字元的末尾新增乙個空字元使其成為乙個c字串。經常和puts()配對使用。

**gets()無法檢查陣列是否裝得下行。**如果輸入的字串過長,會導致緩衝區溢位(buffer overflow),即多餘的字元超出了指定的目標空間。如果這些多餘的字元只是占用了尚未使用的記憶體,就不會立即出現問題;如果它們擦寫掉程式中的其他資料,會導致程式異常中止;或者還有其他情況。

空字元vs空指標

scanf()從第乙個非空白字元作為字串的開始。如果使用%s說明,以下乙個空白字元(空格、空行、製表符或換行符)作為字串的結束(字串不包括空白字元)。如果制定了字段寬度,如%10s,那麼scanf()將讀取第10個字元或讀到第1個空白字元停止(先滿足的條件即是結束輸入的條件)。

函式在遇到空字元時停止輸出,所以必須確保有空字元

用於統計字串的長度。需要#include

strcat()函式用於拼接字串,接受兩個字串作為引數。該函式把第2個字串的備份附加在第1個字串末尾,並把拼接後形成的新字串作為第1個字串,第2個字串不變。strcat()函式的型別是char*,返回第1個引數,即拼接第2個字串後的第1個字串的位址。

strcat()函式無法檢查第1個陣列是否能夠容納第2個字串。如果分配給第1個陣列的空間不夠大,多出來的字串溢位到相鄰儲存單元是就會出現問題。

int strcmp (

const

char

*str1,

const

char

*str2)

;

返回值:負整數/0/正整數

#include

#include

int main (

void

)else

return0;

}

strcmp函式比較的是字串,不是整個陣列。可以用來比較儲存在不同大小陣列中的字串。字串1>2,返回負數。

在某些情況下,可用strcmp()函式來處理結束輸入的情況,如strcmp(str,"***end***")==0

可以比較到字元不同的地方,也可以只比較第3個引數指定的字元數。例如,查詢以"astro"開頭的字串,可以限定函式只查詢這5個字元。strncmp(list[i],"astro",5)

#include

#include

int main (

void

)

把第2個字串拷貝給第1個字串。儲存第1個字串的陣列需要有足夠的空間。

1.strcpy的返回值是第1個引數的值

2.第1個引數不必指向陣列的開始,可以用於拷貝陣列的一部分。

int isalnum(int c):判斷是否有數字及字母

int isalpha(int c):判斷是否有字母

int isdigit(int c):判斷是否是十進位制數字

int islower(int c):判斷是否是小寫字母

int isupper(int c):判斷是否是大寫字母

int tolower(int c):轉化成小寫字母

int toupper(int c):轉換成大寫字母

C語言字串函式總結

用法 size t strlen const char s 返回字串s的長度,不包括結尾的 0 include include int main int argc,char argv result strlen 5 sizeof 6 include include int mylen const c...

c語言字串函式總結

1.字串連線函式strcat extern char strcat char dest,const char src include 把src所指向的字串 包括 0 複製到dest所指向的字串後面 刪除 dest原來末尾的 0 要保證 dest足夠長,以容納被複製進來的 src。src中原有的字元不...

C語言字串函式總結(部分常見字串函式)

1.atoi 函式 將字串轉換成整數 標頭檔案 include stdlib.h 定義函式 int atoi const char nptr 函式說明 atoi 會掃瞄引數nptr字串,跳過前面的空格字元,直到遇上數字或正負符號才開始做轉換,而再遇到非數字或字串結束時 0 才結束轉換,並將結果返回。...