C语言中最常用标准库
標(biāo)準(zhǔn)頭文件包括:
<asset.h>??????<ctype.h>???????<errno.h>???????<float.h>??
<limits.h>???? ?<locale.h>???????<math.h>????????<setjmp.h>?
<signal.h>?????<stdarg.h>??????<stddef.h>??????<stdlib.h>
<stdio.h>??????<string.h>????????<time.h>
一、標(biāo)準(zhǔn)定義(<stddef.h>)?
??? 文件<stddef.h>里包含了標(biāo)準(zhǔn)庫(kù)的一些常用定義,無(wú)論我們包含哪個(gè)標(biāo)準(zhǔn)頭文件,<stddef.h>都會(huì)被自動(dòng)包含進(jìn)來(lái)。
??? 這個(gè)文件里定義:
? l????類(lèi)型size_t???(sizeof運(yùn)算符的結(jié)果類(lèi)型,是某個(gè)無(wú)符號(hào)整型);
? l????類(lèi)型ptrdiff_t(兩個(gè)指針相減運(yùn)算的結(jié)果類(lèi)型,是某個(gè)有符號(hào)整型);
??l????類(lèi)型wchar_t??(寬字符類(lèi)型,是一個(gè)整型,其中足以存放本系統(tǒng)所支持的所有本地環(huán)境中的字符集的所有編碼值。這里還保證空字符的編碼值為0);
??? ????l????符號(hào)常量NULL??(空指針值);
??l????宏offsetor???(這是一個(gè)帶參數(shù)的宏,第一個(gè)參數(shù)應(yīng)是一個(gè)結(jié)構(gòu)類(lèi)型,第二個(gè)參數(shù)應(yīng)是結(jié)構(gòu)成員名。
???????????????????offsetor(s,m)求出成員m在結(jié)構(gòu)類(lèi)型t的變量里的偏移量)。
???注:其中有些定義也出現(xiàn)在其他頭文件里(如NULL)。
二、錯(cuò)誤信息(<errno.h>)
?????<errno.h>定義了一個(gè)int類(lèi)型的表達(dá)式errno,可以看作一個(gè)變量,其初始值為0,一些標(biāo)準(zhǔn)庫(kù)函數(shù)執(zhí)行中出錯(cuò)時(shí)將它設(shè)為非0值,但任何標(biāo)準(zhǔn)庫(kù)函數(shù)都設(shè)置它為0。
??? ?<errno.h>里還定義了兩個(gè)宏EDOM和ERANGE,都是非0的整數(shù)值。數(shù)學(xué)函數(shù)執(zhí)行中遇到參數(shù)錯(cuò)誤,就會(huì)將errno置為EDOM,如出現(xiàn)值域錯(cuò)誤就會(huì)將errno置為ERANGE。
三、輸入輸出函數(shù)(<stdio.h>)
文件打開(kāi)和關(guān)閉:
????? FILE *fopen(const char *filename, const char *mode);
????? int fclose(FILE * stream);
字符輸入輸出:
????? int fgetc(FILE *fp);
????? int fputc(int c, FILE *fp);
?? getc和putc與這兩個(gè)函數(shù)類(lèi)似,但通過(guò)宏定義實(shí)現(xiàn)。通常有下面定義:
??????#define getchar()??getc(stdin)
????? #define putchar(c) putc(c, stdout)
????? int ungetc(int c, FILE* stream);//把字符 c 退回流 stream
格式化輸入輸出:
????? int scanf(const char *format, ...);
????? int printf(const char *format, ...);
????? int fscanf(FILE *stream, const char *format, ...);
????? int fprintf(FILE *stream, const char *format, ...);
????? int sscanf(char *s, const char *format, ...);
????? int sprintf(char *s, const char *format, ...);
行式輸入輸出:
????? char *fgets(char *buffer, int n, FILE *stream);
????? int fputs(const char *buffer, FILE *stream);
????? char *gets(char *s);
??????int puts(const char *s);
直接輸入輸出:
????? size_t fread(void *pointer, size_t size,?size_t num, FILE *stream);
????? size_t fwrite(const void *pointer, size_t size,?size_t num, FILE *stream);
?
四、數(shù)學(xué)函數(shù)(<math.h>)
三角函數(shù):
?
| 三角函數(shù) | sin | cos | tan |
| 反三角函數(shù) | asin | acos | atan |
| 雙曲函數(shù) | sinh | cosh | tanh |
指數(shù)和對(duì)數(shù)函數(shù):
?
| 以e為底的指數(shù)函數(shù) | exp |
| 自然對(duì)數(shù)函數(shù) | log |
| 以10為底的對(duì)數(shù)函數(shù) | log10 |
其他函數(shù):
?
| 平方根 | sqrt |
| 絕對(duì)值 | fabs |
| 乘冪,第一個(gè)參數(shù)作為底,第二個(gè)是指數(shù) | double pow(double, double) |
| 實(shí)數(shù)的余數(shù),兩個(gè)參數(shù)分別是被除數(shù)和除數(shù) | double fmod(double, double) |
注:所有上面未給出類(lèi)型特征的函數(shù)都取一個(gè)參數(shù),其參數(shù)與返回值都是double類(lèi)型。
下面函數(shù)返回雙精度值(包括函數(shù)ceil和floor)。在下表里,除其中有特別說(shuō)明的參數(shù)之外,所有函數(shù)的其他參數(shù)都是double類(lèi)型。
?
| 函數(shù)原型 | 意義解釋 |
| ceil(x) | 求出不小于x的最小整數(shù)(返回與這個(gè)整數(shù)對(duì)應(yīng)的double值) |
| floor(x) | 求出不大于x的最大整數(shù)(返回與這個(gè)整數(shù)對(duì)應(yīng)的double值) |
| atan2(y, x) | 求出?tan-1(y/x),其值的范圍是[-pai,pai]? |
| ldexp(x, int n) | 求出x*2n |
| frexp(x, int?*exp) | 把?x分解為?y*2n,?是位于區(qū)間?[1/2,1)里的一個(gè)小數(shù),作為函數(shù)結(jié)果返回,整數(shù)n?通過(guò)指針*exp返回(應(yīng)提供一個(gè)int變量地址)。當(dāng)x?為0時(shí)這兩個(gè)結(jié)果的值都是0 |
| modf(x, double *ip) | 把x分解為小數(shù)部分和整數(shù)部分,小數(shù)部分作為函數(shù)返回值,整數(shù)部分通過(guò)指針*ip返回。 |
五、字符處理函數(shù)(<ctype.h>)
見(jiàn)下表:
?
| int isalpha(c) | c是字母字符 |
| int isdigit(c) | c是數(shù)字字符 |
| int isalnum(c) | c是字母或數(shù)字字符 |
| int isspace(c) | c是空格、制表符、換行符 |
| int isupper(c) | c是大寫(xiě)字母 |
| int islower(c) | c是小寫(xiě)字母 |
| int iscntrl(c) | c是控制字符 |
| int isprint(c) | c是可打印字符,包括空格 |
| int isgraph(c) | c是可打印字符,不包括空格 |
| int isxdigit(c) | c是十六進(jìn)制數(shù)字字符 |
| int ispunct(c) | c是標(biāo)點(diǎn)符號(hào) |
| int tolower(int c) | 當(dāng)c是大寫(xiě)字母時(shí)返回對(duì)應(yīng)小寫(xiě)字母,否則返回c本身 |
| int toupper(int c) | 當(dāng)c是小寫(xiě)字母時(shí)返回對(duì)應(yīng)大寫(xiě)字母,否則返回c本身 |
注:條件成立時(shí)這些函數(shù)返回非0值。最后兩個(gè)轉(zhuǎn)換函數(shù)對(duì)于非字母參數(shù)返回原字符。
六、字符串函數(shù)(<string.h>)
字符串函數(shù)
??? 所有字符串函數(shù)列在下表里,函數(shù)描述采用如下約定:s、t表示?(char *)類(lèi)型的參數(shù),cs、ct表示(const char*)類(lèi)型的參數(shù)(它們都應(yīng)表示字符串)。n表示size_t類(lèi)型的參數(shù)(size_t是一個(gè)無(wú)符號(hào)的整數(shù)類(lèi)型),c是整型參數(shù)(在函數(shù)里轉(zhuǎn)換到char):
?
| 函數(shù)原型 | 意義解釋 |
| size_t strlen(cs) | 求出cs的長(zhǎng)度 |
| char *strcpy(s,ct) | 把ct復(fù)制到s。要求s指定足夠大的字符數(shù)組 |
| char *strncpy(s,ct,n) | 把ct里的至多n個(gè)字符復(fù)制到s。要求s指定一個(gè)足夠大的字符數(shù)組。如果ct里的字符不夠n個(gè),就在s里填充空字符。 |
| char *strcat(s,ct) | 把ct里的字符復(fù)制到s里已有的字符串之后。s應(yīng)指定一個(gè)保存著字符串,而且足夠大的字符數(shù)組。 |
| char *strncat(s,ct,n) | 把ct里的至多n個(gè)字符復(fù)制到s里已有的字符串之后。s應(yīng)指定一個(gè)保存著字符串,而且足夠大的字符數(shù)組。 |
| int strcmp(cs,ct) | 比較字符串cs和ct的大小,在cs大于、等于、小于ct時(shí)分別返回正值、0、負(fù)值。 |
| int strncmp(cs,ct,n) | 比較字符串cs和ct的大小,至多比較n個(gè)字符。在cs大于、等于、小于ct時(shí)分別返回正值、0、負(fù)值。 |
| char *strchr(cs,c) | 在cs中查尋c并返回c第一個(gè)出現(xiàn)的位置,用指向這個(gè)位置的指針表示。當(dāng)cs里沒(méi)有c時(shí)返回值NULL |
| char *strrchr(cs,c) | 在cs中查尋c并返回c最后一個(gè)出現(xiàn)的位置,沒(méi)有時(shí)返回NULL |
| size_t strspn(cs,ct) | 由cs起確定一段全由ct里的字符組成的序列,返回其長(zhǎng)度 |
| size_t strcspn(cs,ct) | 由cs起確定一段全由非ct里的字符組成的序列,返回其長(zhǎng)度 |
| char *strpbrk(cs,ct) | 在cs里查尋ct里的字符,返回第一個(gè)滿(mǎn)足條件的字符出現(xiàn)的位置,沒(méi)有時(shí)返回NULL |
| char *strstr(cs,ct) | 在cs中查尋串ct(查詢(xún)子串),返回ct作為cs的子串的第一個(gè)出現(xiàn)的位置,ct未出現(xiàn)在cs里時(shí)返回NULL |
| char *strerror(n) | 返回與錯(cuò)誤編號(hào)n相關(guān)的錯(cuò)誤信息串(指向該錯(cuò)誤信息串的指針) |
| char *strtok(s,ct) | 在s中查尋由ct中的字符作為分隔符而形成的單詞 |
存儲(chǔ)區(qū)操作
??? <string.h>還有一組字符數(shù)組操作函數(shù)(存儲(chǔ)區(qū)操作函數(shù)),名字都以mem開(kāi)頭,以某種高效方式實(shí)現(xiàn)。在下面原型中,參數(shù)s和t的類(lèi)型是(void *),cs和ct的類(lèi)型是(const void *),n的類(lèi)型是size_t,c的類(lèi)型是int(轉(zhuǎn)換為unsigned char)。
?
| 函數(shù)原型 | 意義解釋 |
| void *memcpy(s,ct,n) | 從ct處復(fù)制n個(gè)字符到s處,返回s |
| void *memmove(s,ct,n) | 從ct處復(fù)制n個(gè)字符到s處,返回s,這里的兩個(gè)段允許重疊 |
| int memcmp(cs,ct,n) | 比較由cs和ct開(kāi)始的n個(gè)字符,返回值定義同strcmp |
| void *memchr(cs,c,n) | 在n個(gè)字符的范圍內(nèi)查尋c在cs中的第一次出現(xiàn),如果找到,返回該位置的指針值,否則返回NULL |
| void *memset(s,c,n) | 將s的前n個(gè)字符設(shè)置為c,返回s |
七、功能函數(shù)(<stdlib.h>)
隨機(jī)數(shù)函數(shù):
?
| 函數(shù)原型 | 意義解釋 |
| int rand(void) | 生成一個(gè)0到RAND_MAX的隨機(jī)整數(shù) |
| void srand(unsigned seed) | 用seed為隨后的隨機(jī)數(shù)生成設(shè)置種子值 |
動(dòng)態(tài)存儲(chǔ)分配函數(shù):
?
| 函數(shù)原型 | 意義解釋 |
| void *calloc(size_t n, size_t size) | 分配一塊存儲(chǔ),其中足以存放n個(gè)大小為size的對(duì)象,并將所有字節(jié)用0字符填充。返回該存儲(chǔ)塊的地址。不能滿(mǎn)足時(shí)返回NULL |
| void *malloc(size_t size) | 分配一塊足以存放大小為size的存儲(chǔ),返回該存儲(chǔ)塊的地址,不能滿(mǎn)足時(shí)返回NULL |
| void *realloc(void *p, size_t size) | 將p所指存儲(chǔ)塊調(diào)整為大小size,返回新塊的地址。如能滿(mǎn)足要求,新塊的內(nèi)容與原塊一致;不能滿(mǎn)足要求時(shí)返回NULL,此時(shí)原塊不變 |
| void free(void *p) | 釋放以前分配的動(dòng)態(tài)存儲(chǔ)塊 |
幾個(gè)整數(shù)函數(shù)
??? 幾個(gè)簡(jiǎn)單的整數(shù)函數(shù)見(jiàn)下表,div_t和ldiv_t是兩個(gè)預(yù)定義結(jié)構(gòu)類(lèi)型,用于存放整除時(shí)得到的商和余數(shù)。div_t類(lèi)型的成分是int類(lèi)型的quot和rem,ldiv_t類(lèi)型的成分是long類(lèi)型的quot和rem。
?
| 函數(shù)原型 | 意義解釋 |
| int abs(int n) | 求整數(shù)的絕對(duì)值 |
| long labs(long n) | 求長(zhǎng)整數(shù)的絕對(duì)值 |
| div_t div(int n, int m) | 求n/m,商和余數(shù)分別存放到結(jié)果結(jié)構(gòu)的對(duì)應(yīng)成員里 |
| ldiv_t ldiv(long n, long m) | 同上,參數(shù)為長(zhǎng)整數(shù) |
數(shù)值轉(zhuǎn)換
?
| 函數(shù)原型 | 意義解釋 |
| double atof(const char *s) | 由串s構(gòu)造一個(gè)雙精度值 |
| int atoi(const char *s) | 由串s構(gòu)造一個(gè)整數(shù)值 |
| long atol(const char *s) | 由串s構(gòu)造一個(gè)長(zhǎng)整數(shù)值 |
執(zhí)行控制
1)非正常終止函數(shù)abort。
???????? 原型是:?void abort(void);
2)正常終止函數(shù)exit。
???????? 原型是:void exit(int status);
?? 導(dǎo)致程序按正常方式立即終止。status作為送給執(zhí)行環(huán)境的出口值,0表示成功結(jié)束,兩個(gè)可用的常數(shù)為EXIT_SUCCESS,EXIT_FAILURE。
3)正常終止注冊(cè)函數(shù)atexit。
???????? 原型是:int atexit(void (*fcn)(void))
?? 可用本函數(shù)把一些函數(shù)注冊(cè)為結(jié)束動(dòng)作。被注冊(cè)函數(shù)應(yīng)當(dāng)是無(wú)參無(wú)返回值的函數(shù)。注冊(cè)正常完成時(shí)atexit返回值0,否則返回非零值。
與執(zhí)行環(huán)境交互
1)向執(zhí)行環(huán)境傳送命令的函數(shù)system。
??????????? 原型是:int system(const char *s);
?? 把串s傳遞給程序的執(zhí)行環(huán)境要求作為系統(tǒng)命令執(zhí)行。如以NULL為參數(shù)調(diào)用,函數(shù)返回非0表示環(huán)境里有命令解釋器。如果s不是NULL,返回值由實(shí)現(xiàn)確定。
2)訪問(wèn)執(zhí)行環(huán)境的函數(shù)getenv。
?????????? 原型是:char *getenv(const char *s);
???從執(zhí)行環(huán)境中取回與字符串s相關(guān)聯(lián)的環(huán)境串。如果找不到就返回NULL。本函數(shù)的具體結(jié)果由實(shí)現(xiàn)確定。在許多執(zhí)行環(huán)境里,可以用這個(gè)函數(shù)去查看“環(huán)境變量”的值。
常用函數(shù)bsearch和qsort
1)二分法查找函數(shù)bsearch:
??? void *bsearch(const void *key, const void *base,?size_t n, size_t size,?int (*cmp)(const void *keyval, const void *datum));
?? 函數(shù)指針參數(shù)cmp的實(shí)參應(yīng)是一個(gè)與字符串比較函數(shù)strcmp類(lèi)似的函數(shù),確定排序的順序,當(dāng)?shù)谝粋€(gè)參數(shù)keyval比第二個(gè)參數(shù)datum大、相等或小時(shí)分別返回正、零或負(fù)值。
2)快速排序函數(shù)qsort:
???? void qsort(void *base, size_t n, size_t size,?int (*cmp)(const void *, const void *));
???qsort對(duì)于比較函數(shù)cmp的要求與bsearch一樣。設(shè)有數(shù)組base[0],...,base[n-1],元素大小為size。用qsort可以把這個(gè)數(shù)組的元素按cmp確定的上升順序重新排列。
總結(jié)
以上是生活随笔為你收集整理的C语言中最常用标准库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: matlab文件批量导入问题总结
- 下一篇: STM32 端口复用与重映射及低功耗引脚