日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 21ic電子網
[導讀]有很多工程師喜歡自己封裝一些標準庫已有的函數,其實自己封裝的函數,并不一定比標準庫好,有時候反而代碼更冗余,且有bug。下面就來分享一下C語言常見的一些標準庫。

有很多工程師喜歡自己封裝一些標準庫已有的函數,其實自己封裝的函數,并不一定比標準庫好,有時候反而代碼更冗余,且有bug。下面就來分享一下C語言常見的一些標準庫。


標準頭文件包括:

           

一、標準定義()?

文件里包含了標準庫的一些常用定義,無論我們包含哪個標準頭文件,都會被自動包含進來。


這個文件里定義:

類型size_t(sizeof運算符的結果類型,是某個無符號整型);


類型ptrdiff_t(兩個指針相減運算的結果類型,是某個有符號整型);


類型wchar_t(寬字符類型,是一個整型,其中足以存放本系統(tǒng)所支持的所有本地環(huán)境中的字符集的所有編碼值。這里還保證空字符的編碼值為0);


符號常量NULL(空指針值);


宏offsetot?(這是一個帶參數的宏,第一個參數應是一個結構類型,第二個參數應是結構成員名。

offsetot(s,m)

求出成員m在結構類型t的變量里的偏移量)。


注:其中有些定義也出現(xiàn)在其他頭文件里(如NULL)。


二、錯誤信息(

定義了一個int類型的表達式errno,可以看作一個變量,其初始值為0,一些標準庫函數執(zhí)行中出錯時將它設為非0值,但任何標準庫函數都設置它為0。


里還定義了兩個宏EDOM和ERANGE,都是非0的整數值。數學函數執(zhí)行中遇到參數錯誤,就會將errno置為EDOM,如出現(xiàn)值域錯誤就會將errno置為ERANGE。


三、輸入輸出函數(

文件打開和關閉:

FILE *fopen(const char *filename, const char *mode);int fclose(FILE * stream);
字符輸入輸出:
int fgetc(FILE *fp);int fputc(int c, FILE *fp);
getc和putc與這兩個函數類似,但通過宏定義實現(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);

四、數學函數(

1.三角函數:

三角函數

sin

cos

tan

反三角函數

asin

acos

atan

雙曲函數

sinh

cosh

tanh



2.指數和對數函數:

e為底的指數函數

exp

自然對數函數

log

10為底的對數函數

log10



3.其他函數:

平方根

sqrt

絕對值

fabs

乘冪,第一個參數作為底,第二個是指數

double pow(double, double)

實數的余數,兩個參數分別是被除數和除數

double fmod(double, double)



注:所有上面未給出類型特征的函數都取一個參數,其參數與返回值都是double類型。


下面函數返回雙精度值(包括函數ceil和floor)。在下表里,除其中有特別說明的參數之外,所有函數的其他參數都是double類型。

函數原型

意義解釋

ceil(x)

求出不小于x的最小整數(返回與這個整數對應的double值)

floor(x)

求出不大于x的最大整數(返回與這個整數對應的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)里的一個小數,作為函數結果返回,整數n?通過指針*exp返回(應提供一個int變量地址)。當x?0時這兩個結果的值都是0

modf(x, double

*ip)

x分解為小數部分和整數部分,小數部分作為函數返回值,整數部分通過指針*ip返回。


五、字符處理函數(

見下表:

int isalpha(c)

c是字母字符

int isdigit(c)

c是數字字符

int isalnum(c)

c是字母或數字字符

int isspace(c)

c是空格、制表符、換行符

int isupper(c)

c是大寫字母

int islower(c)

c是小寫字母

int iscntrl(c)

c是控制字符

int isprint(c)

c是可打印字符,包括空格

int isgraph(c)

c是可打印字符,不包括空格

int isxdigit(c)

c是十六進制數字字符

int ispunct(c)

c是標點符號

int tolower(int c)

當c是大寫字母時返回對應小寫字母,否則返回c本身

int toupper(int c)

當c是小寫字母時返回對應大寫字母,否則返回c本身


注:條件成立時這些函數返回非0值。最后兩個轉換函數對于非字母參數返回原字符。


六、字符串函數(

1.字符串函數

所有字符串函數列在下表里,函數描述采用如下約定:s、t表示 (char *)類型的參數,cs、ct表示(const char*)類型的參數(它們都應表示字符串)。n表示size_t類型的參數(size_t是一個無符號的整數類型),c是整型參數(在函數里轉換到char):

函數原型

意義解釋

size_t strlen(cs)

求出cs的長度

char *strcpy(s,ct)

把ct復制到s。要求s指定足夠大的字符數組

char *strncpy(s,ct,n)

把ct里的至多n個字符復制到s。要求s指定一個足夠大的字符數組。如果ct里的字符不夠n個,就在s里填充空字符。

char *strcat(s,ct)

把ct里的字符復制到s里已有的字符串之后。s應指定一個保存著字符串,而且足夠大的字符數組。

char *strncat(s,ct,n)

把ct里的至多n個字符復制到s里已有的字符串之后。s應指定一個保存著字符串,而且足夠大的字符數組。

int strcmp(cs,ct)

比較字符串cs和ct的大小,在cs大于、等于、小于ct時分別返回正值、0、負值。

int strncmp(cs,ct,n)

比較字符串cs和ct的大小,至多比較n個字符。在cs大于、等于、小于ct時分別返回正值、0、負值。

char *strchr(cs,c)

在cs中查尋c并返回c第一個出現(xiàn)的位置,用指向這個位置的指針表示。當cs里沒有c時返回值NULL

char *strrchr(cs,c)

在cs中查尋c并返回c最后一個出現(xiàn)的位置,沒有時返回NULL

size_t strspn(cs,ct)

由cs起確定一段全由ct里的字符組成的序列,返回其長度

size_t strcspn(cs,ct)

由cs起確定一段全由非ct里的字符組成的序列,返回其長度

char *strpbrk(cs,ct)

在cs里查尋ct里的字符,返回第一個滿足條件的字符出現(xiàn)的位置,沒有時返回NULL

char *strstr(cs,ct)

在cs中查尋串ct(查詢子串),返回ct作為cs的子串的第一個出現(xiàn)的位置,ct未出現(xiàn)在cs里時返回NULL

char *strerror(n)

返回與錯誤編號n相關的錯誤信息串(指向該錯誤信息串的指針)

char *strtok(s,ct)

在s中查尋由ct中的字符作為分隔符而形成的單詞


2.存儲區(qū)操作

還有一組字符數組操作函數(存儲區(qū)操作函數),名字都以mem開頭,以某種高效方式實現(xiàn)。在下面原型中,參數s和t的類型是(void *),cs和ct的類型是(const void *),n的類型是size_t,c的類型是int(轉換為unsigned char)。

函數原型

意義解釋

void *memcpy(s,ct,n)

從ct處復制n個字符到s處,返回s

void *memmove(s,ct,n)

從ct處復制n個字符到s處,返回s,這里的兩個段允許重疊

int memcmp(cs,ct,n)

比較由cs和ct開始的n個字符,返回值定義同strcmp

void *memchr(cs,c,n)

在n個字符的范圍內查尋c在cs中的第一次出現(xiàn),如果找到,返回該位置的指針值,否則返回NULL

void *memset(s,c,n)

將s的前n個字符設置為c,返回s


七、功能函數(

1.隨機數函數:

函數原型

意義解釋

int rand(void)

生成一個0到RAND_MAX的隨機整數

void srand(unsigned seed)

用seed為隨后的隨機數生成設置種子值


2.動態(tài)存儲分配函數:

函數原型

意義解釋

void *calloc(size_t n, size_t size)

分配一塊存儲,其中足以存放n個大小為size的對象,并將所有字節(jié)用0字符填充。返回該存儲塊的地址。不能滿足時返回NULL

void *malloc(size_t size)

分配一塊足以存放大小為size的存儲,返回該存儲塊的地址,不能滿足時返回NULL

void *realloc(void *p, size_t size)

將p所指存儲塊調整為大小size,返回新塊的地址。如能滿足要求,新塊的內容與原塊一致;不能滿足要求時返回NULL,此時原塊不變

void free(void *p)

釋放以前分配的動態(tài)存儲塊


3.幾個整數函數

幾個簡單的整數函數見下表,div_t和ldiv_t是兩個預定義結構類型,用于存放整除時得到的商和余數。div_t類型的成分是int類型的quot和rem,ldiv_t類型的成分是long類型的quot和rem。

函數原型

意義解釋

int abs(int n)

求整數的絕對值

long labs(long n)

求長整數的絕對值

div_t div(int n, int m)

求n/m,商和余數分別存放到結果結構的對應成員里

ldiv_t ldiv(long n, long m)

同上,參數為長整數



4.數值轉換

函數原型

意義解釋

double atof(const char *s)

由串s構造一個雙精度值

int atoi(const char *s)

由串s構造一個整數值

long atol(const char *s)

由串s構造一個長整數值



5.執(zhí)行控制

1)非正常終止函數abort。

原型是:?

void abort(void);

2)正常終止函數exit。

原型是:

void exit(int status);

導致程序按正常方式立即終止。status作為送給執(zhí)行環(huán)境的出口值,0表示成功結束,兩個可用的常數為EXIT_SUCCESS,EXIT_FAILURE。


3)正常終止注冊函數atexit。

原型是:

int atexit(void (*fcn)(void))

可用本函數把一些函數注冊為結束動作。被注冊函數應當是無參無返回值的函數。注冊正常完成時atexit返回值0,否則返回非零值。


6.與執(zhí)行環(huán)境交互

1)向執(zhí)行環(huán)境傳送命令的函數system。

?原型是:

int system(const char *s);

把串s傳遞給程序的執(zhí)行環(huán)境要求作為系統(tǒng)命令執(zhí)行。如以NULL為參數調用,函數返回非0表示環(huán)境里有命令解釋器。如果s不是NULL,返回值由實現(xiàn)確定。


2)訪問執(zhí)行環(huán)境的函數getenv。

原型是:

char *getenv(const char *s);

從執(zhí)行環(huán)境中取回與字符串s相關聯(lián)的環(huán)境串。如果找不到就返回NULL。本函數的具體結果由實現(xiàn)確定。在許多執(zhí)行環(huán)境里,可以用這個函數去查看“環(huán)境變量”的值。


7.常用函數bsearch和qsort

1)二分法查找函數bsearch:

void *bsearch(const void *key, const void *base, size_t n, size_t size, int (*cmp)(const void *keyval, const void *datum));

函數指針參數cmp的實參應是一個與字符串比較函數strcmp類似的函數,確定排序的順序,當第一個參數keyval比第二個參數datum大、相等或小時分別返回正、零或負值。


2)快速排序函數qsort:


qsort對于比較函數cmp的要求與bsearch一樣。設有數組base[0],...,base[n-1],元素大小為size。用qsort可以把這個數組的元素按cmp確定的上升順序重新排列。

void qsort(void *base, size_t n, size_t size, int (*cmp)(const void *, const void *));


免責聲明:本文系網絡轉載,版權歸原作者所有。如有問題,請聯(lián)系我們,謝謝!


免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

21ic電子網

掃描二維碼,關注更多精彩內容

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

隨著現(xiàn)代家庭生活方式不斷升級,廚房已不再只是功能空間,而逐漸成為融合審美表達、健康管理與智能體驗的重要場域。消費者在關注空間整體性的同時,也對食材儲存的安全性、潔凈度以及使用便利性提出了更高要求?;趯χ袊彝フ鎸嵤褂脠?..

關鍵字: 冰箱 嵌入式

在嵌入式系統(tǒng)、工業(yè)物聯(lián)網等各類電子設備中,UART與網口是兩種應用廣泛的通信接口,前者作為經典的串行通信接口,承擔著簡單設備互聯(lián)、調試日志傳輸等基礎任務,后者則專注于高速、遠距離的數據交互,是設備接入網絡、實現(xiàn)大數據量傳...

關鍵字: 嵌入式 通信接口 網口通訊

在軟件開發(fā)領域,設計模式被譽為“解決特定問題的最佳實踐”,但在嵌入式開發(fā)中,它卻常常處于“邊緣地帶”。許多嵌入式工程師職業(yè)生涯中可能從未刻意使用過設計模式,甚至認為這些“軟件工程理論”與單片機、傳感器、實時系統(tǒng)等硬件緊密...

關鍵字: 嵌入式 設計模式

在居住結構持續(xù)演進與消費需求不斷升級的背景下,中國家庭廚房正經歷從“功能集合”向“系統(tǒng)空間”的深層轉變。廚房不再只是烹飪的場所,而逐漸成為融合效率、健康、美學與家庭互動的重要生活空間。基于對這一趨勢的長期洞察,西門子家電...

關鍵字: 嵌入式 蒸玲瓏

在物聯(lián)網設備、工業(yè)控制系統(tǒng)和智能家居等嵌入式場景中,輕量級WEB服務器扮演著核心角色。它們不僅需要滿足資源受限環(huán)境下的性能需求,還需兼顧安全性、可擴展性和開發(fā)效率。本文從資源占用、功能特性、適用場景三個維度,對比分析六大...

關鍵字: 嵌入式 WEB服務器

在嵌入式軟件開發(fā)工具領域,一場悄然的變革正在發(fā)生。隨著全球軟件行業(yè)向訂閱制轉型,嵌入式軟件開發(fā)工具的授權模式也迎來了重要調整。市場上的嵌入式軟件開發(fā)工具基本可以分為三類:商用開發(fā)工具,開源開發(fā)工具和廠商私有開發(fā)工具,其中...

關鍵字: 嵌入式 MCU RISC-V

在資源受限的嵌入式系統(tǒng)中,傳統(tǒng)調試工具(如JTAG)往往成本高昂且占用引腳資源。本文介紹一種基于串口的低成本調試方案,通過自定義協(xié)議實現(xiàn)內存數據的實時監(jiān)控,硬件成本可降低80%以上,特別適用于8/16位MCU開發(fā)場景。

關鍵字: 嵌入式 串口 內存數據

隨著國家家電以舊換新補貼政策的持續(xù)推進,綠色節(jié)能、品質升級正成為越來越多家庭的新年煥新關鍵詞。面對消費者在居住空間、生活效率與健康體驗上的多元需求,西門子家電圍繞新春煥新節(jié)點,正式開啟“開門紅”煥新季,通過國家補貼與企業(yè)...

關鍵字: 嵌入式 咖啡機 嵌飲機

設計人員通過瑞薩遠程板場可在新MCU發(fā)布首日免費開始編程和編碼

關鍵字: MCU 嵌入式 電路板
關閉