日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言——标准库

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言——标准库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語言標準庫


宗旨:技術的學習是有限的,分享的精神是無限的。


<assert.h> ???斷言

<ctype.h> ???字符類測試

<errno.h> ??(部分)庫函數拋出的錯誤代碼

<float.h> ????浮點數運算

<limits.h> ???檢測整型數據類型值范圍

<locale.h> ???本土化

<math.h>??? ?數學函數

<setjmp.h>? ?“非局部跳轉

<signal.h>?? ?信號

<stdarg.h>?? ?可變參數列表

<stddef.h> ???一些常數,類型和變量

<stdio.h>??? ?輸入和輸出

<stdlib.h>??? ?實用功能

<string.h> ????字符串函數

<time.h>???? ?時間和日期函數

?

一、assert.h

頭文件<assert.h>唯一的目的是提供宏assert的定義。如果斷言非真(expression==0),則程序會在標準錯誤流輸出提示信息,并使程序異常中止調用abort() 。
定義:void assert (int expression);

//#defineNDEBUG

#include<assert.h>

intmain(int argc, char* argv[])

{

?????? int a = 12;

?????? int b = 24;

?????? assert( a > b );

?????? printf("a is larger than b!");

?????? return 0;

}

上面的程序會發現程序中止,printf并未執行,且有這樣的輸出:?main: Assertion `a > b' failed.?原因就是因為a其實小于b,導致斷言失敗,assert 輸出錯誤信息,并調用abort()中止了程序執行。

?

二、ctype.h

<ctype.h> 主要提供兩類重要的函數:字符測試函數和字符大小轉化函數。提供的函數中都以int類型為參數,并返回一個int類型的值。實參類型應該隱式轉換或者顯示轉換為int類型。

int isalnum(int c);?判斷是否是字母或數字。

int isalpha(int c);?判斷是否是字母。

int iscntrl(int c);?判斷是否是控制字符。

int isdigit(int c);?判斷是否是數字。

int isgraph(int c);?判斷是否是可顯示字符。

int islower(int c);?判斷是否是小寫字母。

int isupper(int c);?判斷是否是大寫字母。

int isprint(int c);?判斷是否是可顯示字符。

int ispunct(int c);?判斷是否是標點字符。

int isspace(int c);?判斷是否是空白字符

int isxdigit(int c);?判斷字符是否為16進制。

int tolower(int c);?轉換為小寫字母。

int toupper(int c);?轉換為大寫字母。

?

三、error.h

error.h 是 C語言 C標準函式庫里的頭文件,定義了通過錯誤碼來返回錯誤信息的宏:errno 宏定義為一個int型態的左值, 包含任何函數使用errno功能所產生的上一個錯誤碼。

一些表示錯誤碼,定義為整數值的宏:
EDOM 源自于函數的參數超出范圍,例如sqrt(-1)
ERANGE 源自于函數的結果超出范圍,例如s trtol("0xfffffffff",NULL,0)
EILSEQ 源自于不合??法的字符順序,例如wcstombs(str, L"\xffff", 2)

?

四、float.h

float頭文件定義了浮點型數值的最大最小限 浮點型數值以下面的方式定義:符號-value E 指數 符號是正負,value是數字的值?;下面的值是用#define定義的,這些值是詳細的實現,但是可能沒有比這里給出的更詳細,在所有實例里FLT指的是float,DBL是double,LDBL指的是longdouble

?

五、<limits.h>取值范圍

CHAR_BIT?一個ASCII字符長度

SCHAR_MIN?字符型最小值

SCHAR_MAX?字符型最大值

UCHAR_MAX?無符號字符型最大值

CHAR_MIN
CHAR_MAX?
char字符的最大最小值,如果char字符正被表示有符號整數。它們的值就跟有符號整數一樣。 否則char字符的最小值就是0,最大值就是無符號char字符的最大值。

MB_LEN_MAX?一個字符所占最大字節數

SHRT_MIN?最小短整型

SHRT_MAX?最大短整形

USHRT_MAX?最大無符號短整型

INT_MIN?最小整型

INT_MAX?最大整形

UINT_MAX?最大無符號整型

LONG_MIN?最小長整型

LONG_MAX?最大長整型

ULONG_MAX?無符號長整型

?

六、<locale.h>本土化

國家、文化和語言規則集稱為區域設置,<locale.h>頭文件中定義了區域設置相關的函數。setlocale函數用于設置或返回當前的區域特性,localeconv用于返回當前區域中的數字和貨幣信息(保存在struct lconv結構實例中)。setlocale的第一個實參指定要改變的區域行為類別,預定義的setlocale類別有:

LC_ALL全部本地化信息

LC_COLLATE影響strcoll和strxfrm

LC_CTYPE影響字符處理函數和多行字符處理函數

LC_MONETARY影響localeconv返回的貨幣格式化信息

LC_NUMERIC影響格式化輸入輸出字符中的小數點符號

LC_TIME影響strftime函數

<locale.h>?頭文件中提供了2個函數?
setlocale()?設置或恢復本地化信息?
localeconv()?返回當前地域設置的信息

setlocale(constant,location)?用法?
如果這個函數成功執行,將返回當前的場景屬性;如果執行失敗,將返回False。

constant?參數 (必要參數。指定設置的場景信息)

LC_ALL?–所有下屬的常量

LC_COLLATE?–排列順序

LC_CTYPE?–字符分類和轉換(例如:將所有的字符轉換成小寫或大寫形式)

LC_MESSAGES?–系統信息格式

LC_MONETARY?–貨幣 / 通貨格式

LC_NUMERIC?–數值格式

LC_TIME?–日期和時間格式

location?(必要參數)必要參數。指定需要進行場景信息設置的國家或區域。它可以由一個字符串或一個數組組成。如果本地區域是一個數組,那么setlocale()函數將嘗試每 個數組元素直到它從中獲取有效的語言和區域代碼信息為止。如果一個區域處于不同操作系統中的不同名稱下,那么這個參數將非常有用。

structlconv *localeconv(void);?用法

localeconv返回lconv結構指針lconv結構介紹: 保存格式化的數值信息,保存數值包括貨幣和非貨幣的格式化信息,localeconv返回指向該對象的指針,以下為結構中的成員及信息:

char*decimal_point;?數字的小數點號

char*thousands_sep;?數字的千分組分隔符

每個元素為相應組中的數字位數,索引越高的元素越靠左邊。一個值為CHAR_MAX的元素表示沒有更多的分組了。一個值為0的元素表示前面的元素能用在靠左邊的所有分組中

char*grouping;?數字分組分隔符

char*int_curr_symbol;?前面的三個字符ISO 4217中規定的貨幣符號,第四個字符是分隔符,第五個字符是'\0' */

char*currency_symbol;?本地貨幣符號

char*mon_decimal_point;?貨幣的小數點號

char*mon_thousands_sep;?千分組分隔符

char*mon_grouping;?類似于grouping元素

char*positive_sign;?正幣值的符號

char*negative_sign;?負幣值的符號

charint_frac_digits;?國際幣值的小數部分

charfrac_digits;?本地幣值的小數部分

charp_cs_precedes;?如果currency_symbol放在正幣值之前則為1,否則為0

charp_sep_by_space;?當且僅當currency_symbol與正幣值之間用空格分開時為1

charn_cs_precedes;?< 如果currency_symbol放在負幣值之前則為1,否則為0/dt>

charn_sep_by_space;?當且僅當currency_symbol與負幣值之間用空格分開時為1

charp_sign_posn;?格式化選項

0 - 在數量和貨幣符號周圍的圓括號?
1 - 數量和貨幣符號之前的 + 號?
2 - 數量和貨幣符號之后的 + 號?
3 - 貨幣符號之前的 + 號?
4 - 貨幣符號之后的 + 號

charn_sign_posn?格式化選項

0 - 在數量和貨幣符號周圍的圓括號?
1 - 數量和貨幣符號之前的 - 號?
2 - 數量和貨幣符號之后的 - 號?
3 - 貨幣符號之前的 - 號?
4 - 貨幣符號之后的 - 號

最后提示:可以使用setlocale(LC_ALL,NULL)函數將場景信息設置為系統默認值。

?

七、<math.h>C語言中的數學函數庫

三角函數

double sin(double x);?正弦

double cos(double x);?余弦

double tan(double x);?正切

*cot三角函數,可以使用tan(PI/2-x)來實現。


反三角函數

double asin(double x);結果介于[-PI/2, PI/2]?

double acos(double x);?結果介于[0, PI]?

double atan(double x);?
反正切(主值), 結果介于[-PI/2, PI/2]?

double atan2(double y,double);?
反正切(整圓值), 結果介于[-PI, PI]


雙曲三角函數

double sinh(double x);?計算雙曲正弦

double cosh(double x);?計算雙曲余弦

double tanh(double x);?計算雙曲正切


指數與對數

double exp(double x);?求取自然數e的冪

double sqrt(double x);?開平方

double log(double x);?以e為底的對數

double log10(double x);?以10為底的對數

double pow(double x, double y);?
計算以x為底數的y次冪?

float powf(float x, float y);?
與pow一致,輸入與輸出皆為浮點數


取整

double ceil(double);?取上整

double floor(double);?取下整


標準化浮點數

double frexp(double f, int *p);?
標準化浮點數, f = x * 2^p, 已知f求x, p ( x介于[0.5,1] )?

double ldexp(double x, int p);?
與frexp相反, 已知x, p求f


取整與取余

double modf(double, double*);?
將參數的整數部分通過指針回傳, 返回小數部分?

double fmod(double, double);?
返回兩參數相除的余數

?

八、<setjmp.h> “非局部跳轉

在該頭文件中定義了一種特別的函數調用和函數返回順序的方式。這種方式不同于以往的函數調用和返回順序,?
它允許程序流程立即從一個深層嵌套的函數中返回。
<setjmp.h> 中定義了兩個宏:

int setjmp(jmp_buf env); /*設置調轉點*/?
longjmp(jmp_buf jmpb, int retval); /*跳轉*/?

宏setjmp的功能是將當前程序的狀態保存在結構env ,為調用宏longjmp設置一個跳轉點。setjmp將當前信息保存在env中供longjmp使用。其中env是jmp_buf結構類型的。?
Demo :

#include? <stdio.h>

#include? <setjmp.h>

staticjmp_buf buf;

voidsecond(void) {

??? printf("second\n");???????

?????? // 打印

??? longjmp(buf,1);???????????

?????? // 跳回setjmp的調用處

?????? - 使得setjmp返回值為1

}

?void first(void) {

??? second();

??? printf("first\n");?????????

?????? // 不可能執行到此行

}

?int main() {??

??? if ( ! setjmp(buf) ) {

??????? first();??????????????

?????? // 進入此行前,setjmp返回0

??? } else {?????????????????

?????? // 當longjmp跳轉回,

?????? setjmp返回1,因此進入此行

??????? printf("main\n");?

????????????? // 打印

??? }

???? return 0;

}

直接調用setjmp時,返回值為0,這一般用于初始化(設置跳轉點時)。以后再調用longjmp宏時用env變量進行跳轉。程序會自動跳轉到setjmp宏的返回語句處,此時setjmp的返回值為非0,由longjmp的第二個參數指定。?
一般地,宏setjmp和longjmp是成對使用的,這樣程序流程可以從一個深層嵌套的函數中返回。

?

九、<signal.h>信號

在signal.h頭文件中,提供了一些函數用以處理執行過程中所產生的信號。

宏:

SIG_DFL

SIG_ERR

SIG_IGN

SIGABRT

SIGFPE

SIGILL

SIGINT

SIGSEGV

SIGTERM

函數:

signal();

raise();

變量:

typedefsig_atomic_t

sig_atomic_t?類型是int類型,用于接收signal函數的返回值。

以SIG_開頭的宏用于定義信號處理函數

SIG_DFL?默認信號處理函數。

SIG_ERR表示一個錯誤信號,當signal函數調用失敗時的返回值。

SIG_IGN信號處理函數,表示忽略該信號。

SIG開頭的宏是用來在下列情況下,用來表示一個信號代碼:

SIGABRT異常終止(abort函數產生)。

SIGFPE浮點錯誤(0作為除數產生的錯誤,非法的操作)。

SIGILL非法操作(指令)。

SIGINT交互式操作產生的信號(如CTRL - C)。

SIGSEGV無效訪問存儲(片段的非法訪問,內存非法訪問)。

SIGTERM終止請求。

signal?函數

void(*signal(intsig,void (*func)(int)))(int);

上面的函數定義中,sig 表示一個信號代碼(相當于暗號類別),即是上面所定義的SIG開頭的宏。當有信號出現(即當收到暗號)的時候,參數func所定義的函數就會被調用。如果func等于SIG_DFL,則表示調用默認的處理函數。如果等于SIG_IGN,則表示這個信號被忽略(不做處理)。如果func是用戶自定義的函數,則會先調用默認的處理函數,再調用用戶自己定義的函數。 自定義函數,有一個參數,參數類型為int,用來表示信號代碼(暗號類別)。同時,函數必須以return、abort、exit 或longjump等語句結束。當自定義函數運行結束,程序會繼續從被終止的地方繼續運行。(除非信號是SIGFPE導致結果未定義,則可能無法繼續運行)

如果調用signal函數成功,則會返回一個指針,該指針指向為所指定的信號類別的所預先定義的信號處理器。?
如果調用失敗,則會返回一個SIG_ERR,同時errno的值也會被相應的改變。

raise函數

intraise(int sig);

發出一個信號sig。信號參數為SIG開頭的宏。

如果調用成功,返回0。否則返回一個非零值。

?

十、<stdarg.h>可變參數

<stdarg.h>頭文件定義了一些宏,當函數參數未知時去獲取函數的參數

變量:typedefva_list


宏:

va_start()

va_arg()

va_end()


變量和定義
va_list類型通過stdarg宏定義來訪問一個函數的參數表,參數列表的末尾會用省略號省略?

聲明:void va_start(va_list ap, last_arg);
用va_arg和va_end宏初始化參數ap,last_arg是傳給函數的固定參數的最后一個,省略號之前的那個參數 注意va_start必須在使用va_arg和va_end之前調用

聲明:type va_arg(va_list ap, type);
用type類型擴展到參數表的下個參數
注意ap必須用va_start初始化,如果沒有下一個參數,結果會是undefined

聲明:void va_end(va_list ap); 允許一個有參數表(使用va_start宏)的函數返回,如果返回之前沒有調用va_end,結果會是undefined。參數變量列表可能不再使用(在沒調用va_start的情況下調用va_end)

?

十一、<stddef.h>一些常數,類型和變量

<stddef.h>頭文件定義了一些標準定義,許多定義也會出現在其他的頭文件里

宏命令:NULL 和 offsetof()?

變量:
typedef ptrdiff_t
typedef size_t
typedef wchar_t

變量和定義:
ptrdiff_t是兩個指針相減的結果
size_t是sizeof一個關鍵詞得到的無符號整數值
wchar_t是一個寬字符常量的大小,是整數類型
NULL是空指針的常量值

offsetof(type, member-designator);這個宏返回一個結構體成員相對于結構體起始地址的偏移量(字節為單位),type是結構體的名字,member-designator是結構體成員的名字。

?

十二、<stdio.h>頭文件定義了用于輸入和輸出的函數、類型和宏。

最重要的類型是用于聲明文件指針的FILE。另外兩個常用的類型是 size_t和fpos_t,size_t是由運算符sizeof產生的無符號整類型;fpos_t類型定義能夠唯一說明文件中的每個位置的對象。由頭部 定義的最有用的宏是EOF,其值代表文件的結尾。


變量:?
typedef size_t
typedef FILE
typedef fpos_t

常量 :?
NULL?空值
_IOFBF?表示完全緩沖?
_IOLBF?表示線緩沖?
_IONBF?表示無緩存
BUFSIZ?setbuf函數所使用的緩沖區的大小
EOF?EOF是負整數表示ENDOF FILE
FOPEN_MAX?(20)同時打開的文件的最大數量
FILENAME_MAX?文件名的最大長度
L_tmpnam整數,最大長度的臨時文件名
SEEK_CUR取得目前文件位置
SEEK_END將讀寫位置移到文件尾時
SEEK_SET將讀寫位置移到文件開頭
TMP_MAXtmpnam最多次數
stderr標準錯誤流,默認為屏幕, 可輸出到文件。
stdin標準輸入流,默認為鍵盤
stdout標準輸出流,默認為屏幕?

所有函數(點擊可查看介紹和DEMO) :?

?? clearerr();?復位錯誤標志

?? fclose();?關閉一個流。

?? feof();?檢測文件結束符

?? ferror();?檢查流是否有錯誤

?? fflush();更新緩沖區

?? fgetpos();?移動文件流的讀寫位置

?? fopen();打開文件

?? fread();?從文件流讀取數據

?? freopen();?打開文件

?? fseek();?移動文件流的讀寫位置

?? fsetpos();定位流上的文件指針

?? ftell();?取得文件流的讀取位置

?? fwrite();?將數據寫至文件流

?? remove();?刪除文件

?? rename();?更改文件名稱或位置

?? rewind();?重設讀取目錄的位置為開頭位置

?? setbuf();?把緩沖區與流相聯

?? setvbuf();?把緩沖區與流相關

?? tmpfile();?以wb+形式創建一個臨時二進制文件

?? tmpnam();? 產生一個唯一的文件名

?? fprintf();?格式化輸出數據至文件

?? fscanf();?格式化字符串輸入

?? printf();?格式化輸出數據

?? scanf();?格式輸入函數

?? sprintf();?格式化字符串復制

?? sscanf();?格式化字符串輸入

?? vfprintf();?格式化輸出數據至文件

?? vprintf();?格式化輸出數據

?? vsprintf();?格式化字符串復制

?? fgetc();?由文件中讀取一個字符

?? fgets();?文件中讀取一字符串

?? fputc();?將一指定字符寫入文件流中

?? fputs();?將一指定的字符串寫入文件內

?? getc();?由文件中讀取一個字符

?? getchar();?由標準輸入設備內讀進一字符

?? gets();?由標準輸入設備內讀進一字符串

?? putc();?將一指定字符寫入文件中

?? putchar();?將指定的字符寫到標準輸出設備

?? puts();?送一字符串到流stdout中

?? ungetc();? 將指定字符寫回文件流中

?? perror();?打印出錯誤原因信息字符串

?

十三、<stdlib.h>實用功能

<stdlib.h>頭文件里包含了C語言的中最常用的系統函數


宏:

NULL?空

EXIT_FAILURE?失敗狀態碼

EXIT_SUCCESS?成功狀態碼

RAND_MAX?rand的最大返回值

MB_CUR_MAX?多字節字符中的最大字節數

變量:

typedefsize_t是unsignedinteger類型

typedefwchar_t?一個寬字符的大小

structdiv_t?是結構體類型 作為div函數的返回類型

structldiv_t是結構體類型 作為ldiv函數的返回類型

函數:

字符串函數

atof();?將字符串轉換成浮點型數

atoi();?將字符串轉換成整型數

atol();?將字符串轉換成長整型數

strtod();?將字符串轉換成浮點數

strtol();?將字符串轉換成長整型數

strtoul();?將字符串轉換成無符號長整型數

?

?

內存控制函數

calloc();?配置內存空間

free();?釋放原先配置的內存

malloc();?配置內存空間

realloc();?重新分配主存

?

環境函數

abort();?異常終止一個進程

atexit();設置程序正常結束前調用的函數

exit();?正常結束進程

getenv();?取得環境變量內容

system();?執行shell命令

?

?

搜索和排序函數

bsearch();?二元搜索

qsort();?利用快速排序法排列數組

?

數學函數

abs();?計算整型數的絕對值

div();?將兩個整數相除, 返回商和余數

labs();?取長整型絕對值

ldiv();兩個長整型數相除, 返回商和余數

rand();?隨機數發生器

srand();?設置隨機數種子

?

多字節函數

mblen();?根據locale的設置確定字符的字節數

mbstowcs();?把多字節字符串轉換為寬字符串

mbtowc();?把多字節字符轉換為寬字符

wcstombs();?把寬字符串轉換為多字節字符串

wctomb();?把寬字符轉換為多字節字符

<string.h>字符串函數

<stdlib.h>頭文件里包含了C語言的最常用的字符串操作函數


宏:

NULL?空

變量:

typedefsize_t

函數:

memchr();在某一內存范圍中查找一特定字符

memcmp();?比較內存內容

memcpy();?拷貝內存內容

memmove();?拷貝內存內容

memset();?將一段內存空間填入某值

strcat();?連接兩字符串

strncat();?連接兩字符串

strchr();?查找字符串中第一個出現的指定字符

strcmp();?比較字符串

strncmp();比較2個字符串的前N個字符

strcoll();?采用目前區域的字符排列比較字符串

strcpy();?拷貝字符串

strncpy();?拷貝字符串

strcspn();?返回字符連續不含指定字符的字符數

strerror();?返回錯誤原因的描述字符串

strlen();?計算字符串長度

strpbrk();?查找字符串中第一個出現的指定字符

strrchr();?查找字符串中最后出現的指定字符

strspn();返回字符串連續不含指定字符的字符數

strstr();?在一字符串中查找指定的字符串

strtok();?分割字符串

strxfrm();?轉換字符串

?

十四、<time.h>時間和日期函數

<time.h>是C標準函數庫中獲取時間與日期、對時間與日期數據操作及格式化的頭文件。
宏:

NULL?null是一個null指針常量的值

CLOCKS_PER_SEC?每秒的時鐘數

變量:

typedefsize_t?類型定義

typedefclock_t類型定義

structtm?結構體


struct tm?

{

int tm_sec;?/* 秒 – 取值區間為[0,59] */

int tm_min;?/* 分 - 取值區間為[0,59] */

int tm_hour;?/* 時 - 取值區間為[0,23] */

int tm_mday;?/* 一個月中的日期 - 取值區間為[1,31] */

int tm_mon;?/* 月份(從一月開始,0代表一月) - 取值區間為[0,11] */

int tm_year;?/* 年份,其值等于實際年份減去1900*/

int tm_wday;?/* 星期 – 取值區間為[0,6],其中0代表星期天,1代表星期一,以此類推 */

int tm_yday;?/* 從每年的1月1日開始的天數 – 取值區間為[0,365],其中0代表1月1日,1代表1月2日,以此類推 */

int tm_isdst;?/* 夏令時標識符,實行夏令時的時候,tm_isdst為正。不實行夏令時的進候,tm_isdst為0;不了解情況時,tm_isdst()為負。*/?

};

函數:

asctime();?將時間和日期以字符串格式表示

clock();?確定處理器時間

ctime();?把日期和時間轉換為字符串

difftime();?計算兩個時刻之間的時間差

gmtime();?把日期和時間轉換為(GMT)時間

localtime();取得當地目前時間和日期

mktime();將時間結構數據轉換成經過的秒數

strftime();?將時間格式化

time();?取得目前的時間

?

總結

以上是生活随笔為你收集整理的C语言——标准库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。