strcat和strncat的區別及原理

2021-10-19 10:02:27 字數 1715 閱讀 5090

我們都知道strcat和strncat都是在乙個字串後追加字元的函式,那t它們有什麼區別呢?它們又是什麼原理呢?

首先要了解二者的原理才能夠區分它們有什麼樣的區別;

strcat的用法——呼叫strcat函式,傳兩個字串陣列過去或者乙個字串陣列和乙個字串,需要呼叫string.h標頭檔案;

char arr1[30]

="abcd"

;char arr2=

"efd"

;strcat

(arr1, arr2);--

----

----

----

----

----

strcat (str,

"concatenated."

)

其原始碼為(我自己實現的,會與真正的原始碼有所不同,但是原理是相同的)

第一步:把被增加字串的指標指向該字串的』\0』處

第二步:將增加字串與被增加字串的『\0』交換

第三步:將str的最後一位置為』\0』

void

strcat

(char

* str,

const

char

* d)

str++

;*str =

'\0';}

intmain()

strncat的用法——呼叫strncat函式,傳兩個字串以及整型值,整型值表示的要追加的字元個數,需要呼叫string.h標頭檔案;

char str1[20]

="abcde"

;char str2[20]

="cdefad"

; strncat (str1, str2,6)

;

原始碼:

第一步:先把arr1的指標移到』\0』處

第二步:把arr2所指向的元素與arr1所指向的元素交換;

void

my_strncat

(char

* arr1,

char

* arr2,

int len)

}int

main()

可以清楚地看到二者的傳參不一致,但實現的效果卻是相同的,二者最主要的區別是strcat()的增加字串的結束條件是str2 == 『\0』(str2為要新增的字串);strncat的迴圈結束的條件則是所要追加的字串個數len為0;

那麼為什麼要有兩個實現效果一樣的函式出現呢?

看起來二者的實現效果是一樣的,但是如果是要在原本字串的基礎上增加原本字串,那麼只能使用strncat函式了;

char arr1[30]

="abcd"

;strcat

(arr1, arr1)

;

因為strcat本質上是把被增加的字串的』\0』與增加字串的元素交換實現的,那麼當增加的是自己的時候,』\0』會和前面的元素交換,當全部交換完畢之後會發現』\0』又跑到後面去了,這樣終止條件便不再成立,會陷入到死迴圈當中;strcat()方便之處在於只用傳兩個引數可以實現,比較簡便;

但建議時採用strncat(),因為不會出現上述的陷入死迴圈的可能,頂多是多算一步長度(strlen(陣列名)),並且strncat()有乙個不可或缺的優勢,是能夠自由的控制要增加的字元;

strcat 函式和strncat 函式

strcat 函式 strcat 用於拼接字串 函式接受兩個字串作為引數。該函式把第二個字串的備份附加在第乙個字串末尾,並把拼接後形成的新字串作為第乙個字串,第二個字串不變。strcat 函式的型別是char 即,只想char的指標 strcat 函式返回第乙個引數,即拼接第二個字串後的第乙個字串的...

strcat函式與strncat函式的深入分析

函式原型 extern char strcat char dest,char src 引數說明 dest為乙個目的字串的指標,即被連線的字串 在前 src為乙個源字串的指標 在後 所在庫名 include 函式功能 把src所指字串新增到dest結尾處實現字串的連線,連線過程覆蓋deswww.cpp...

strcat的實現和模擬

1.strcat 函式的呼叫形式 strcat 字串1,字串2 2.功能 將字串2鏈結到字串1的末尾,形成乙個新字串 include include int main 3.模擬實現strcat函式 include include include void my strcpy char dest,co...