【C语言笔记进阶篇】第二章:字符串函数和内存函数
目錄
(1)分類
(2)字符串函數(shù)
A:strlen(求字符串長度)
B:strcpy(字符串復(fù)制_不受限制)
C:strcat(字符串追加_不受限制)
D:strcmp(字符串比較_不受限制)
E:strncmp(字符串復(fù)制_受限制)
F:strncat(字符串追加_受限制)
G:strncmp(字符串比較_受限制)
H:strstr(查找字符串)
I:strtok(字符串切割)
J:strerror
(3)字符函數(shù)
A:字符分類函數(shù)
B:字符轉(zhuǎn)換函數(shù)(常用的轉(zhuǎn)大寫和轉(zhuǎn)小寫)
(4)內(nèi)存函數(shù)
A:memcpy(不重疊內(nèi)存拷貝函數(shù))
B:memmove(重疊內(nèi)存拷貝函數(shù))
前言:C語言中會大量涉及到對字符和字符串的處理,但是C語言本身是沒有字符串類型的,按照之前所學(xué),需要處理字符串時(shí),我們通常將其保存在一個(gè)字符數(shù)組或者是定義為常量字符串
(1)分類
?
(2)字符串函數(shù)
A:strlen(求字符串長度)
第一:strlen的基本用法
第二:strlen的注意事項(xiàng)
①:對于其返回值的注意事項(xiàng)
如下,從主觀角度上講,最終的輸出結(jié)果和我們預(yù)期的是不一致的,這是因?yàn)閟trlen返回的類型是size_t,查看定義可知,size_t實(shí)際上就是unsignend int,編寫庫函數(shù)的人的設(shè)置這樣的返回值的目的就在于他們認(rèn)為字符串長度絕對不可能是負(fù)數(shù)。但是這樣的一個(gè)設(shè)置,有時(shí)就會產(chǎn)生如下的歧義
第三:模擬實(shí)現(xiàn)strlen
①:計(jì)數(shù)器的方式
②:遞歸(不創(chuàng)建臨時(shí)變量)
?
③:指針-指針
B:strcpy(字符串復(fù)制_不受限制)
第一:strcpy的基本用法
第二:strcpy的注意事項(xiàng)
①:源字符串必須以'\0'結(jié)束
也就是如果使用字符數(shù)組的方式賦值,最后的元素必須是'\0',不然會找不到結(jié)束標(biāo)志的
②:不要賦值到常量字符串中去
常量字符串是不可變的,也就是不能修改的
第三:模擬實(shí)現(xiàn)strcpy
?
C:strcat(字符串追加_不受限制)
第一:strcat的基本用法
第二:strcat的模擬實(shí)現(xiàn)
D:strcmp(字符串比較_不受限制)
第一:strcmp的基本用法
第二:strcmp注意事項(xiàng)
C語言中規(guī)定,大于時(shí)返回的是大于0的數(shù)字,小于時(shí)返回的是小于0的數(shù)字,但是在VS編譯器下,他返回的數(shù)字卻是固定的1或-1,所以為了使得代碼更具有通用性,利用strcmp在判斷字符串大小時(shí),正確的寫法如下
第三:strcmp模擬實(shí)現(xiàn)
E:strncmp(字符串復(fù)制_受限制)
第一:strncmp的基本用法
第二:strcmp的注意事項(xiàng)
第三:模擬實(shí)現(xiàn)strncpy
F:strncat(字符串追加_受限制)
第一:strnact的基本用法
第二:strncat的注意事項(xiàng)
如果要追加的字符個(gè)數(shù)超過了源字符串長度,那么只把應(yīng)該追加的追加后補(bǔ)上'\0'再就不管了
第三:strncat的模擬實(shí)現(xiàn)
G:strncmp(字符串比較_受限制)
第一:strncmp的基本用法
第二:strncmp模擬實(shí)現(xiàn)
H:strstr(查找字符串)
第一:strstr的基本用法
第二:strstr的模擬實(shí)現(xiàn)
關(guān)于字符串查找,其實(shí)就是數(shù)據(jù)結(jié)構(gòu)中串那一章的串的模式匹配算法,屬于暴利匹配,具體查閱相關(guān)部分
I:strtok(字符串切割)
第一:strtok的基本用法
?
J:strerror
第一:strerror的基本用法
?
當(dāng)使用庫函數(shù)時(shí),有時(shí)會出現(xiàn)錯(cuò)誤,引入<errno.h>,系統(tǒng)會生成一個(gè)全局變量errno,出現(xiàn)錯(cuò)誤后系統(tǒng)就會生成錯(cuò)誤碼并賦值給errno,但是我們并不知道錯(cuò)誤碼真正的含義,而strerror就是用來翻譯這個(gè)錯(cuò)誤碼的,函數(shù)返回值是char*,也就是一個(gè)字符串。比如在打開文件時(shí)經(jīng)常會遇到打開文件失敗,而打開文件失敗的原因有很多種,此時(shí)我們就可用strerror函數(shù)來查看究竟是什么原因
(3)字符函數(shù)
A:字符分類函數(shù)
#include <ctype.h>
B:字符轉(zhuǎn)換函數(shù)(常用的轉(zhuǎn)大寫和轉(zhuǎn)小寫)
(4)內(nèi)存函數(shù)
上述我們研究的函數(shù)都是針對字符串而言的,但是對于整形數(shù)組,結(jié)構(gòu)體這樣的數(shù)據(jù)是不能用字符串函數(shù)進(jìn)行操作的,所以就要使用內(nèi)存函數(shù)
A:memcpy(不重疊內(nèi)存拷貝函數(shù))
第一:memcpy的基本用法
第二:memcpy的模擬實(shí)現(xiàn)
B:memmove(重疊內(nèi)存拷貝函數(shù))
第一:memmove基本用法
C:memcmp(內(nèi)存比較函數(shù))
總結(jié)
以上是生活随笔為你收集整理的【C语言笔记进阶篇】第二章:字符串函数和内存函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#静态类 转载:(原文:http://
- 下一篇: 计算机网络之物理层:5、数据的交换方式(