C語言隨筆(strcat的實現)

2021-06-21 12:34:34 字數 1408 閱讀 7064

今天看c語言教程的時候,看到有關指標,字串陣列的時候,發現乙個有意思的函式---strcat  

char *strcat( char *strdestination, const char *strsource);   此函式的功能是,把strsource的字串 放在strdestination後面,並且覆蓋strdestination的\0字串

在網上搜尋了好多的實現方法,主要的有以下幾種。

1.#include "stdio.h"

char *strcat(char *str1,char * str2)

if((str1 == null) || (str2 == null))      throw("invalide arguments");  

char * pt = str1;

while(*str1 != '\0') str1++;

while(*str2 != '\0') *str1++ = *str2++;

*str1 = '\0';

return pt;

void main()

char a = "markyuan";

char b = "yyyyyy";

char *cat = strcat(a,b);

printf("%s\n",cat); 

看完這段**之後感覺一定是有錯誤的,首先 如果把乙個字串新增到另乙個字串中,執行相關函式之後,怎麼能讓引數str1改變呢。這是不希望看到的。

還有 while(*str2 != '\0') *str1++ = *str2++;   這一句。不停地在str1後面增加資料,當str2非常大的時候,超過了str1字串陣列的範圍,造成越界,這不就會汙染其他的變數,對本程式有害嘛。

所以上述**問題多多。

2.列舉出書上的**

char *strcat(char *s1,register const char *s2)

非常讓人敬佩僅僅幾行。太……了。

首先上面的**解決了 改變 s1指標的問題,先寄給p然後再操作p最後返回的是s1 而操作之後,通過p改變了字串,此時s1指向的是修改過的。

對於 while(*p++ = *s2++) 這條語句,經過再三分析感覺,越界問題應該不存在,str系列函式呼叫時要自行保證\0結尾和有足夠的記憶體.而且現在的大部分編譯器都推薦使用帶n的str系列函式 總而言之,如果使用 strcat函式,那麼是否越界也就是p指向的記憶體是否夠用,要靠呼叫者來保證(坑爹)。就是給s1分配足夠大的記憶體。當然可以利用求界函式,例如 strlen進行求值,得到範圍之後進行修改。

說到str系列函式,例如strcmp strcat sttcpy都是遇到\0就結束,像strcpy函式遇到\0就結束拷貝。但是通過memcpy就不必考慮這種情況。

c語言 實現Strcat函式

實現char my strcat char dest,char src 函式.返回 dest字串的位址。功能 將src指向的字串追加到dest指向字串的後面。例如 char dest 10 andef char src ghi my strcat 之後,dest指向的字串為 andefghi inc...

C語言 模擬實現strcat

strcat 函式是char 型別,其主要作用是將第二個字串拷貝到第乙個字串後,形成乙個新的字串。但需要注意的是strcat 函式並不能檢查出第乙個陣列是否能容納下第二個字串,可能會出現多出來的字元溢位問題。所以在使用的過程一定要考慮到為第乙個陣列分配足夠大的空間,或者可以使用需要另乙個引數來指定最...

詳解C語言實現strcat

strcat 庫函式的原型如下 char strcat char dest,const char src 主要作用是把src指向的字串追加到dest指向的字串上。明白了這個作用之後我們就可以自己開始編寫實現這個函式。至於為什麼要自己編寫這個函式,面試的時候面試官就是想要這麼做,你想要這份offer的...