99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

C語言常見的一些標準庫

Q4MP_gh_c472c21 ? 來源:嵌入式ARM ? 作者:嵌入式ARM ? 2020-11-18 16:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

標準頭文件包括:

一、標準定義(

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

這個文件里定義:

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

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

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

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

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

offsetot(s,m)

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

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

二、錯誤信息(

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

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

三、輸入輸出函數(shù)(

文件打開和關閉:

FILE *fopen(const char *filename, const char *mode);int fclose(FILE * stream);字符輸入輸出:

int fgetc(FILE *fp);int fputc(int c, FILE *fp);getc和putc與這兩個函數(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ù)學函數(shù)(

1.三角函數(shù):

三角函數(shù) sin cos tan
反三角函數(shù) asin acos atan
雙曲函數(shù) sinh cosh tanh

2.指數(shù)和對數(shù)函數(shù):

以e為底的指數(shù)函數(shù) exp
自然對數(shù)函數(shù) log
以10為底的對數(shù)函數(shù) log10

3.其他函數(shù):

平方根 sqrt
絕對值 fabs
乘冪,第一個參數(shù)作為底,第二個是指數(shù) double pow(double, double)
實數(shù)的余數(shù),兩個參數(shù)分別是被除數(shù)和除數(shù) double fmod(double, double)

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

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

函數(shù)原型 意義解釋
ceil(x) 求出不小于x的最小整數(shù)(返回與這個整數(shù)對應的double值)
floor(x) 求出不大于x的最大整數(shù)(返回與這個整數(shù)對應的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)里的一個小數(shù),作為函數(shù)結果返回,整數(shù)n通過指針*exp返回(應提供一個int變量地址)。當x為0時這兩個結果的值都是0
modf(x, double
*ip)
把x分解為小數(shù)部分和整數(shù)部分,小數(shù)部分作為函數(shù)返回值,整數(shù)部分通過指針*ip返回。

五、字符處理函數(shù)(

見下表:

int isalpha(c) c是字母字符
int isdigit(c) c是數(shù)字字符
int isalnum(c) c是字母或數(shù)字字符
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是十六進制數(shù)字字符
int ispunct(c) c是標點符號
int tolower(int c) 當c是大寫字母時返回對應小寫字母,否則返回c本身
int toupper(int c) 當c是小寫字母時返回對應大寫字母,否則返回c本身

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

六、字符串函數(shù)(

1.字符串函數(shù)

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

函數(shù)原型 意義解釋
size_t strlen(cs) 求出cs的長度
char *strcpy(s,ct) 把ct復制到s。要求s指定足夠大的字符數(shù)組
char *strncpy(s,ct,n) 把ct里的至多n個字符復制到s。要求s指定一個足夠大的字符數(shù)組。如果ct里的字符不夠n個,就在s里填充空字符。
char *strcat(s,ct) 把ct里的字符復制到s里已有的字符串之后。s應指定一個保存著字符串,而且足夠大的字符數(shù)組。
char *strncat(s,ct,n) 把ct里的至多n個字符復制到s里已有的字符串之后。s應指定一個保存著字符串,而且足夠大的字符數(shù)組。
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ū)操作

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

函數(shù)原型 意義解釋
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個字符的范圍內(nèi)查尋c在cs中的第一次出現(xiàn),如果找到,返回該位置的指針值,否則返回NULL
void *memset(s,c,n) 將s的前n個字符設置為c,返回s

七、功能函數(shù)(

1.隨機數(shù)函數(shù):

函數(shù)原型 意義解釋
int rand(void) 生成一個0到RAND_MAX的隨機整數(shù)
void srand(unsigned seed) 用seed為隨后的隨機數(shù)生成設置種子值

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

函數(shù)原型 意義解釋
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所指存儲塊調(diào)整為大小size,返回新塊的地址。如能滿足要求,新塊的內(nèi)容與原塊一致;不能滿足要求時返回NULL,此時原塊不變
void free(void *p) 釋放以前分配的動態(tài)存儲塊

3.幾個整數(shù)函數(shù)

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

函數(shù)原型 意義解釋
int abs(int n) 求整數(shù)的絕對值
long labs(long n) 求長整數(shù)的絕對值
div_t div(int n, int m) 求n/m,商和余數(shù)分別存放到結果結構的對應成員里
ldiv_t ldiv(long n, long m) 同上,參數(shù)為長整數(shù)

4.數(shù)值轉換

函數(shù)原型 意義解釋
double atof(const char *s) 由串s構造一個雙精度值
int atoi(const char *s) 由串s構造一個整數(shù)值
long atol(const char *s) 由串s構造一個長整數(shù)值

5.執(zhí)行控制

1)非正常終止函數(shù)abort。

原型是:

void abort(void);

2)正常終止函數(shù)exit。

原型是:

void exit(int status);

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

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

原型是:

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

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

6.與執(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,返回值由實現(xiàn)確定。

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

原型是:

char *getenv(const char *s);

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

7.常用函數(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ù)strcmp類似的函數(shù),確定排序的順序,當?shù)谝粋€參數(shù)keyval比第二個參數(shù)datum大、相等或小時分別返回正、零或負值。

2)快速排序函數(shù)qsort:

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

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

責任編輯:xj

原文標題:C語言常用標準庫解讀

文章出處:【微信公眾號:嵌入式ARM】歡迎添加關注!文章轉載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 封裝
    +關注

    關注

    128

    文章

    8694

    瀏覽量

    145554
  • C語言
    +關注

    關注

    180

    文章

    7632

    瀏覽量

    141848
  • 函數(shù)
    +關注

    關注

    3

    文章

    4381

    瀏覽量

    64939

原文標題:C語言常用標準庫解讀

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    提高篇——C語言核心技術(中文版)

    嚴謹?shù)男g語表介紹C語言;第二部分描述標準鏈接;第三部分介紹GNU軟件包中常用的編譯和測試工具。 獲取完整文檔資料可下載附件哦?。。?!如果內(nèi)容有幫助可以關注、點贊、評論支持
    發(fā)表于 06-13 16:39

    如何添加一些網(wǎng)絡上的到mpy固件的說明或手冊教程?

    下有沒有關于如何添加一些網(wǎng)絡上的到mpy固件的說明或手冊教程? 問題2: 關于mpy的image在哪里能了解學習內(nèi)部代碼,只了解一些python,想知道怎么從
    發(fā)表于 04-29 08:16

    嘉立創(chuàng)標準集成(原理圖庫,pcb

    這個PCB是嘉立創(chuàng)的標準集成,使包含了一些常用元件和封裝,使用本集成進行設計的pcb在嘉立創(chuàng)進行投板時不用進行元件方向和位置的確認,節(jié)
    發(fā)表于 04-09 13:59

    為什么學了C語言,卻寫不出像樣的項目?

    在學習編程的路上,C語言幾乎是每個程序員的“必修課”。不管你是打算從事嵌入式開發(fā)、系統(tǒng)編程,還是想要深入理解操作系統(tǒng)的底層原理,C語言都是
    的頭像 發(fā)表于 03-14 17:37 ?447次閱讀
    為什么學了<b class='flag-5'>C</b><b class='flag-5'>語言</b>,卻寫不出像樣的項目?

    基于OpenHarmony標準系統(tǒng)的C++公共基礎類案例:ThreadPoll

    。每個線程每秒打印1段字符串,10秒后停止。2、基礎知識C++公共基礎類標準系統(tǒng)提供了一些常用的C++開發(fā)工具類,包括:文件、路徑、字符
    的頭像 發(fā)表于 02-10 18:09 ?376次閱讀
    基于OpenHarmony<b class='flag-5'>標準</b>系統(tǒng)的<b class='flag-5'>C</b>++公共基礎類<b class='flag-5'>庫</b>案例:ThreadPoll

    AKI跨語言調(diào)用神助攻C/C++代碼遷移至HarmonyOS NEXT

    語言調(diào)用,成為開發(fā)者和廠商面臨的重要挑戰(zhàn)。為解決這痛點,款名為AKI (Alpha Kernel Interacting)的開源三方應運而生,它通過高效封裝跨
    發(fā)表于 01-02 17:08

    HAL標準的區(qū)別 HAL與CMSIS的關系

    在嵌入式系統(tǒng)開發(fā)中,HAL(硬件抽象層)標準是兩種常用的軟件,它們在功能和使用場景上有所不同。 1. 標準
    的頭像 發(fā)表于 12-02 14:02 ?3281次閱讀

    云原生和數(shù)據(jù)哪個好一些?

    云原生和數(shù)據(jù)哪個好一些?云原生和數(shù)據(jù)各有其獨特的優(yōu)勢,適用于不同的場景。云原生強調(diào)高效資源利用、快速開發(fā)部署和高可伸縮性,適合需要高度靈活性和快速迭代的應用。而數(shù)據(jù)則注重數(shù)據(jù)
    的頭像 發(fā)表于 11-29 10:07 ?528次閱讀

    一些常見的動態(tài)電路

    無論是模電還是數(shù)電,理論知識相對來說還是比較枯燥,各種電路原理理解清楚不算容易,換種生動形象的方式或許會增加一些趣味性,也更容易理解這些知識。下面整理了一些常見的電路,以動態(tài)圖形的方
    的頭像 發(fā)表于 11-16 09:26 ?1148次閱讀
    <b class='flag-5'>一些</b><b class='flag-5'>常見</b>的動態(tài)電路

    編程語言的誤區(qū)與常見問題

    誤區(qū):編程語言的選擇 常見問題: 初學者在選擇編程語言時,往往會被市場上的熱門語言所吸引,而忽視了自己的實際需求和興趣。
    的頭像 發(fā)表于 11-15 09:35 ?761次閱讀

    NPU支持的編程語言有哪些

    NPU(Neural Processing Unit)是種專門為深度學習和人工智能應用設計的處理器。NPU支持的編程語言通常與它所集成的平臺或框架緊密相關。以下是一些常見的編程
    的頭像 發(fā)表于 11-15 09:21 ?1948次閱讀

    分享一些常見的電路

    理解模電和數(shù)電的電路原理對于初學者來說可能比較困難,但通過一些生動的教學方法和資源,可以有效地提高學習興趣和理解能力。 下面整理了一些常見的電路,以動態(tài)圖形的方式展示。 整流電路 單相橋式整流
    的頭像 發(fā)表于 11-13 09:28 ?839次閱讀
    分享<b class='flag-5'>一些</b><b class='flag-5'>常見</b>的電路

    LED驅動器應用的一些指南和技巧

    電子發(fā)燒友網(wǎng)站提供《LED驅動器應用的一些指南和技巧.pdf》資料免費下載
    發(fā)表于 09-25 11:35 ?0次下載
    LED驅動器應用的<b class='flag-5'>一些</b>指南和技巧

    hex文件如何查看原c語言代碼

    是處理器可以直接執(zhí)行的指令,而 C 語言代碼則是人類可讀的高級編程語言代碼。 然而,如果你想要從 .hex 文件中獲取一些有用的信息或者對程序進行分析,你可以考慮以下幾種方法: 反匯編
    的頭像 發(fā)表于 09-02 10:37 ?4969次閱讀

    OpenHarmony標準系統(tǒng)C++公共基礎類案例:HelloWorld

    1、程序簡介該程序是基于凌蒙派OpenHarmony-v3.2.1標準系統(tǒng)C++公共基礎類的簡單案例:HelloWorld。主要講解C++公共基礎類
    的頭像 發(fā)表于 08-13 08:23 ?870次閱讀
    OpenHarmony<b class='flag-5'>標準</b>系統(tǒng)<b class='flag-5'>C</b>++公共基礎類<b class='flag-5'>庫</b>案例:HelloWorld