字符串函數(strlen、strcmp、strcat、strncat、strncpy、strncmp、strchr、strrchr、strpbark、strstr、strspn、strcspn等)

有的字符串函數相比大家都很熟悉,這裏將strlen,strcat等字符串函數的注意點說明一下。

首先,先看一下strlen函數:


但是請看下列這種情況:


爲什麼是較長的是「good day」呢?

因爲strlen函數的返回值是無符號整數,無符號數相減也是無符號數,即被減數若小於減數結果仍大於0。

strcat函數:

strcat函數用於字符串的拼接。



但是strcat可不可以自己給自己拼接呢?


是不可以的,strcat拼接時,會將源字符串的‘\0’拷貝到目標字符串,但是自己給自己拼接,永遠不會到'\0',也就沒有形成字符串,所以strcat不能自己給自己拼接。

strcmp函數:


strcmp比較的是字符的ASCII(比較到出現不一樣的字符或者一個字符串結束)

標準規定:當第一個字符串大於第二個字符串,返回的是大於0的數字;

當第一個字符串小於第二個字符串,返回的是小於0的數字;

當第一個字符串等於第二個字符串,返回0.


strncpy函數:


拷貝 num個字符從源字符到目標字符;

如果源字符串的長度小於num,則拷貝完源字符串後,在目標的後邊追加0,直至到num;

值得注意的是strncpy沒有拷‘\0'。


strncat函數:


拼接count個字符從源字符串到目標字符串;

strcat函數拷貝了'\0'。


strncmp函數:


比較到出現不一樣字符或者一個字符串比較結束或者count個字符全部比較結束

其中char [ ][5]是指:


strchr函數:


strchr是指int c 字符第一次在string中出現的所處位置。


這個題是找到字符s在str字符串中出現的位置。

strrchr函數:

strrchr是指字符c最後一次出現在string所處位置。如果模擬strrchr函數,可從字符串後邊字符c第一次出現的位置。

注:strchr函數和strrchr函數功能相反。


strpbrk函數:


strpbrk是指返回第一個字符串中第一個出現在第二個字符串中字符的地址。(返回第一個字符串的地址)


strstr函數:


返回第二個字符串中第一次在第一個字符串中出現的位置。(返回的是第一個字符串地址)


注意:在本題中不可將char str[ ]改爲char *,因爲char *變量字符串指字符串在字符常量區,不可修改,而strncpy語句修改了字符串,將會導致程序崩潰。

strspn函數:


返回的是str1字符串中開始部分匹配str2字符串中字符的個數。(str2中任意一個字符在str1開始部分出現就統計,str2中任意一個字符不在str1開始部分出現,就退出。)


str1中‘1’‘2’‘6’‘t’在str2字符串中出現,'h'沒有出現在str2,退出,不在統計。

strcspn函數:

返回str1字符串開始部分出現的不在str2字符串中字符的個數。(如果str1開始部分字符在str2中出現,則退出)


str1中‘f ’ 'a'    'b'     'c'沒有在str2中出現直至到‘5’停止累計,退出。

注:strspn和strcspn功能相反。

strtok函數:


即char *strtok(char *str,const char *sep)

注:sep參數字符串,定義了用作分隔符(逗號,句號,空格等)的字符集合;

第一個參數指定一個字符串,它包含了0個或者多個由sep字符串中一個或多個分隔符分割的標記;

strtok函數找到有效的分割符(有效分隔符是指分隔符前有字符串,如果沒有,繼續查找分隔符),將其設置爲'\0',並將分隔符前的字符串返回;

對str1字符串進行分割,第一次將第一個參數設置爲str1,以後將第一個參數設置爲NULL,這時將在被保存位置開始,查找下一個分隔符;

如果字符串中不存在分隔符,則返回NULL指針。


注意:strtok的第一個參數爲char *,而不是const char *,所以char *str="- This,a sample string."錯誤,同理字符常量區不可修改。

strerror函數:


爲什麼會存在strerror函數?

一個函數執行既有成功,也有失敗,也有執行到中途因爲某種原因導致程序崩潰。c語言提供全局變量,當調庫函數出現錯誤時,errno會被設置爲對應的錯誤碼。計算機識別數字,而程序員識別字符,所以需要strerror函數將錯誤碼轉爲字符串,方便程序員識別。

本函數在Linux平臺解釋。

首先了解下有多少錯誤碼:


結果爲:


還有錯誤碼,沒有截完整。

下來,驗證下,錯誤碼對應的字符串:


結果爲:


注:沒有文件mymain.c,從上圖可看出錯誤碼對應No such file or directory。