關於字串的函式

2022-09-23 15:21:09 字數 1990 閱讀 8955

關於字串的操作函式有很多,那麼在眾多的函式中是否有乙個共通的地方。下面簡略分析一下。

目前,我在學習中碰到的字串操作函式有:strlen,strcat,strcpy,strcmp;

那麼我們按照上面的順序一一介紹一下。

1.strlen

strlen 是求取字串長度的函式;其原型為:size_t strlen( const char *string );

實現:int strlen(const char *string)

return count;

}在實現部分有幾點,我認為可以加分的選項。

1).const字元的使用,避免了在函式內部不小心改掉字串的值。

2).assert—指標有效性的檢查。

作為初學者,在學習這一部分的時候,應該看看編譯器中的原始碼是怎麼實現這些函式的和函式的 原型是什麼以及函式的返回值是什麼。以便於我們在自己實現這些函式的時候,不會手足無措。

2.strcat

作為字串追加函式,完成的是將源(src)追加到目標(dest)上。那麼,讓我們看看strcat的原型,char *strcat( char *strdestination, const char *strsource );

實現**:

char *my_strcat(char *dest, const char *src)

while (*dest++ = *src++)

return ret;

}同樣,在這個函式中有幾點,需要注意。

1).const assert這些就不再囉嗦了。

2).char * 作為函式的開頭是為了有乙個鏈式訪問。

3).在目標字串遍歷指向'\0'的**中,不可以這樣寫.str

while(*dest++)

讓我們試著分析一下,後置++在*dest為'\0'的時候,dest還往後面記憶體偏移了一塊空間。那麼,會造成什麼結果呢?

eg:將字串" to xian!"追加到字串"welcome"的後面。由於*dest指向了'\0'後面的位置,那麼在輸出的時候,只會輸出welcome。

4).上述**中追加部分,已經將'\0'拷貝進去了。

5).這點要說的是我在才開始犯的錯誤,是在主函式中。看看主函式的**。

int main()

當在vs2013中執行,會出現奔潰。

試著分析一下原因。在主函式載入記憶體的時候,為str1分配了8個位元組的大小(我把"\0"也算進去),當你字串追加的時候,要在8個位元組的空間放16個位元組的內容,很明顯程式會奔潰。那麼,接下來改動程式就變得很簡單,只需要給str1分配最夠的空間即可 。

3.strcpy

字串拷貝函式。函式原型:char *strcpy( char *strdestination, const char *strsource );

實現:char *strcpy(char *dest, const char *src)

*dest = '\0';

return ret;

}同樣,這裡要告訴大家我在寫這個函式的時候遇到的問題。

1).首先是const和assert的使用。

2).在拷貝的**中可以簡化書寫。

while(*dest++ = *src++),同時不要忘記while迴圈中有語句。不建議寫成while(*dest++ = *src++);(注意後面的「;」是while迴圈的語句)。應該寫成

while(*dest++ = *src++)

這樣別人再看你的**的時候也會一目了然,同時便與查錯。

4.strcmp

字串比較函式。函式原型:int strcmp( const char *string1, const char *string2 );

實現:int my_strcmp(const char *dest, const char *src)

return *dest - *src;

}同樣,分析一下這個函式。

1).再次強調 const和assert的使用。

2).關注一下這個函式的返回值。

字串問題及關於字串的函式

字串問題及關於字串的函式 1,char strcpy char dest,char src 把src指向的以null結束的字串複製到dest所指的陣列中。函式返回指向dest指標。注 1,接收字串的陣列或指標所指的記憶體區域一定要大於被複製的字串長度,否則系統可能由於字元長度不夠而被惡意修改。2,d...

關於字串函式的實現

在很多面試及筆試中,都會有字串的操作,有的甚至不允許使用c函式庫中的函式,所使用函式都需要自己編寫。那麼就有必要針對字串函式的實現,進行乙個講解。首先 將詳細講解在字串函式實現中常用的語句 str 實際上是先使用 str,再str str 1 這句話經常出現。比如計算字串長度 int strlen ...

mysql關於字串的函式

1字串擷取 1 1 left rigth left right str,length select left tiduyun.com 4 擷取左邊前4個 select right tiduyun.com 7 擷取右邊前7個1 2 substring 根據下標擷取 mid substr substri...