C语言——标准库
C語(yǔ)言標(biāo)準(zhǔn)庫(kù)
宗旨:技術(shù)的學(xué)習(xí)是有限的,分享的精神是無(wú)限的。
<assert.h> ???斷言
<ctype.h> ???字符類測(cè)試
<errno.h> ??(部分)庫(kù)函數(shù)拋出的錯(cuò)誤代碼
<float.h> ????浮點(diǎn)數(shù)運(yùn)算
<limits.h> ???檢測(cè)整型數(shù)據(jù)類型值范圍
<locale.h> ???本土化
<math.h>??? ?數(shù)學(xué)函數(shù)
<setjmp.h>? ?“非局部跳轉(zhuǎn)”
<signal.h>?? ?信號(hào)
<stdarg.h>?? ?可變參數(shù)列表
<stddef.h> ???一些常數(shù),類型和變量
<stdio.h>??? ?輸入和輸出
<stdlib.h>??? ?實(shí)用功能
<string.h> ????字符串函數(shù)
<time.h>???? ?時(shí)間和日期函數(shù)
?
一、assert.h
頭文件<assert.h>唯一的目的是提供宏assert的定義。如果斷言非真(expression==0),則程序會(huì)在標(biāo)準(zhǔn)錯(cuò)誤流輸出提示信息,并使程序異常中止調(diào)用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;
}
上面的程序會(huì)發(fā)現(xiàn)程序中止,printf并未執(zhí)行,且有這樣的輸出:?main: Assertion `a > b' failed.?原因就是因?yàn)閍其實(shí)小于b,導(dǎo)致斷言失敗,assert 輸出錯(cuò)誤信息,并調(diào)用abort()中止了程序執(zhí)行。
?
二、ctype.h
<ctype.h> 主要提供兩類重要的函數(shù):字符測(cè)試函數(shù)和字符大小轉(zhuǎn)化函數(shù)。提供的函數(shù)中都以int類型為參數(shù),并返回一個(gè)int類型的值。實(shí)參類型應(yīng)該隱式轉(zhuǎn)換或者顯示轉(zhuǎn)換為int類型。
int isalnum(int c);?判斷是否是字母或數(shù)字。
int isalpha(int c);?判斷是否是字母。
int iscntrl(int c);?判斷是否是控制字符。
int isdigit(int c);?判斷是否是數(shù)字。
int isgraph(int c);?判斷是否是可顯示字符。
int islower(int c);?判斷是否是小寫字母。
int isupper(int c);?判斷是否是大寫字母。
int isprint(int c);?判斷是否是可顯示字符。
int ispunct(int c);?判斷是否是標(biāo)點(diǎn)字符。
int isspace(int c);?判斷是否是空白字符
int isxdigit(int c);?判斷字符是否為16進(jìn)制。
int tolower(int c);?轉(zhuǎn)換為小寫字母。
int toupper(int c);?轉(zhuǎn)換為大寫字母。
?
三、error.h
error.h 是 C語(yǔ)言 C標(biāo)準(zhǔn)函式庫(kù)里的頭文件,定義了通過(guò)錯(cuò)誤碼來(lái)返回錯(cuò)誤信息的宏:errno 宏定義為一個(gè)int型態(tài)的左值, 包含任何函數(shù)使用errno功能所產(chǎn)生的上一個(gè)錯(cuò)誤碼。
一些表示錯(cuò)誤碼,定義為整數(shù)值的宏:
EDOM 源自于函數(shù)的參數(shù)超出范圍,例如sqrt(-1)
ERANGE 源自于函數(shù)的結(jié)果超出范圍,例如s trtol("0xfffffffff",NULL,0)
EILSEQ 源自于不合??法的字符順序,例如wcstombs(str, L"\xffff", 2)
?
四、float.h
float頭文件定義了浮點(diǎn)型數(shù)值的最大最小限 浮點(diǎn)型數(shù)值以下面的方式定義:符號(hào)-value E 指數(shù) 符號(hào)是正負(fù),value是數(shù)字的值?;下面的值是用#define定義的,這些值是詳細(xì)的實(shí)現(xiàn),但是可能沒有比這里給出的更詳細(xì),在所有實(shí)例里FLT指的是float,DBL是double,LDBL指的是longdouble
?
五、<limits.h>取值范圍
CHAR_BIT?一個(gè)ASCII字符長(zhǎng)度
SCHAR_MIN?字符型最小值
SCHAR_MAX?字符型最大值
UCHAR_MAX?無(wú)符號(hào)字符型最大值
CHAR_MIN
CHAR_MAX?
char字符的最大最小值,如果char字符正被表示有符號(hào)整數(shù)。它們的值就跟有符號(hào)整數(shù)一樣。 否則char字符的最小值就是0,最大值就是無(wú)符號(hào)char字符的最大值。
MB_LEN_MAX?一個(gè)字符所占最大字節(jié)數(shù)
SHRT_MIN?最小短整型
SHRT_MAX?最大短整形
USHRT_MAX?最大無(wú)符號(hào)短整型
INT_MIN?最小整型
INT_MAX?最大整形
UINT_MAX?最大無(wú)符號(hào)整型
LONG_MIN?最小長(zhǎng)整型
LONG_MAX?最大長(zhǎng)整型
ULONG_MAX?無(wú)符號(hào)長(zhǎng)整型
?
六、<locale.h>本土化
國(guó)家、文化和語(yǔ)言規(guī)則集稱為區(qū)域設(shè)置,<locale.h>頭文件中定義了區(qū)域設(shè)置相關(guān)的函數(shù)。setlocale函數(shù)用于設(shè)置或返回當(dāng)前的區(qū)域特性,localeconv用于返回當(dāng)前區(qū)域中的數(shù)字和貨幣信息(保存在struct lconv結(jié)構(gòu)實(shí)例中)。setlocale的第一個(gè)實(shí)參指定要改變的區(qū)域行為類別,預(yù)定義的setlocale類別有:
LC_ALL全部本地化信息
LC_COLLATE影響strcoll和strxfrm
LC_CTYPE影響字符處理函數(shù)和多行字符處理函數(shù)
LC_MONETARY影響localeconv返回的貨幣格式化信息
LC_NUMERIC影響格式化輸入輸出字符中的小數(shù)點(diǎn)符號(hào)
LC_TIME影響strftime函數(shù)
<locale.h>?頭文件中提供了2個(gè)函數(shù)?
setlocale()?設(shè)置或恢復(fù)本地化信息?
localeconv()?返回當(dāng)前地域設(shè)置的信息
setlocale(constant,location)?用法?
如果這個(gè)函數(shù)成功執(zhí)行,將返回當(dāng)前的場(chǎng)景屬性;如果執(zhí)行失敗,將返回False。
constant?參數(shù) (必要參數(shù)。指定設(shè)置的場(chǎng)景信息)
LC_ALL?–所有下屬的常量
LC_COLLATE?–排列順序
LC_CTYPE?–字符分類和轉(zhuǎn)換(例如:將所有的字符轉(zhuǎn)換成小寫或大寫形式)
LC_MESSAGES?–系統(tǒng)信息格式
LC_MONETARY?–貨幣 / 通貨格式
LC_NUMERIC?–數(shù)值格式
LC_TIME?–日期和時(shí)間格式
location?(必要參數(shù))必要參數(shù)。指定需要進(jìn)行場(chǎng)景信息設(shè)置的國(guó)家或區(qū)域。它可以由一個(gè)字符串或一個(gè)數(shù)組組成。如果本地區(qū)域是一個(gè)數(shù)組,那么setlocale()函數(shù)將嘗試每 個(gè)數(shù)組元素直到它從中獲取有效的語(yǔ)言和區(qū)域代碼信息為止。如果一個(gè)區(qū)域處于不同操作系統(tǒng)中的不同名稱下,那么這個(gè)參數(shù)將非常有用。
structlconv *localeconv(void);?用法
localeconv返回lconv結(jié)構(gòu)指針lconv結(jié)構(gòu)介紹: 保存格式化的數(shù)值信息,保存數(shù)值包括貨幣和非貨幣的格式化信息,localeconv返回指向該對(duì)象的指針,以下為結(jié)構(gòu)中的成員及信息:
char*decimal_point;?數(shù)字的小數(shù)點(diǎn)號(hào)
char*thousands_sep;?數(shù)字的千分組分隔符
每個(gè)元素為相應(yīng)組中的數(shù)字位數(shù),索引越高的元素越靠左邊。一個(gè)值為CHAR_MAX的元素表示沒有更多的分組了。一個(gè)值為0的元素表示前面的元素能用在靠左邊的所有分組中
char*grouping;?數(shù)字分組分隔符
char*int_curr_symbol;?前面的三個(gè)字符ISO 4217中規(guī)定的貨幣符號(hào),第四個(gè)字符是分隔符,第五個(gè)字符是'\0' */
char*currency_symbol;?本地貨幣符號(hào)
char*mon_decimal_point;?貨幣的小數(shù)點(diǎn)號(hào)
char*mon_thousands_sep;?千分組分隔符
char*mon_grouping;?類似于grouping元素
char*positive_sign;?正幣值的符號(hào)
char*negative_sign;?負(fù)幣值的符號(hào)
charint_frac_digits;?國(guó)際幣值的小數(shù)部分
charfrac_digits;?本地幣值的小數(shù)部分
charp_cs_precedes;?如果currency_symbol放在正幣值之前則為1,否則為0
charp_sep_by_space;?當(dāng)且僅當(dāng)currency_symbol與正幣值之間用空格分開時(shí)為1
charn_cs_precedes;?< 如果currency_symbol放在負(fù)幣值之前則為1,否則為0/dt>
charn_sep_by_space;?當(dāng)且僅當(dāng)currency_symbol與負(fù)幣值之間用空格分開時(shí)為1
charp_sign_posn;?格式化選項(xiàng)
0 - 在數(shù)量和貨幣符號(hào)周圍的圓括號(hào)?
1 - 數(shù)量和貨幣符號(hào)之前的 + 號(hào)?
2 - 數(shù)量和貨幣符號(hào)之后的 + 號(hào)?
3 - 貨幣符號(hào)之前的 + 號(hào)?
4 - 貨幣符號(hào)之后的 + 號(hào)
charn_sign_posn?格式化選項(xiàng)
0 - 在數(shù)量和貨幣符號(hào)周圍的圓括號(hào)?
1 - 數(shù)量和貨幣符號(hào)之前的 - 號(hào)?
2 - 數(shù)量和貨幣符號(hào)之后的 - 號(hào)?
3 - 貨幣符號(hào)之前的 - 號(hào)?
4 - 貨幣符號(hào)之后的 - 號(hào)
最后提示:可以使用setlocale(LC_ALL,NULL)函數(shù)將場(chǎng)景信息設(shè)置為系統(tǒng)默認(rèn)值。
?
七、<math.h>是C語(yǔ)言中的數(shù)學(xué)函數(shù)庫(kù)
三角函數(shù)
double sin(double x);?正弦
double cos(double x);?余弦
double tan(double x);?正切
*cot三角函數(shù),可以使用tan(PI/2-x)來(lái)實(shí)現(xiàn)。
反三角函數(shù)
double asin(double x);結(jié)果介于[-PI/2, PI/2]?
double acos(double x);?結(jié)果介于[0, PI]?
double atan(double x);?
反正切(主值), 結(jié)果介于[-PI/2, PI/2]?
double atan2(double y,double);?
反正切(整圓值), 結(jié)果介于[-PI, PI]
雙曲三角函數(shù)
double sinh(double x);?計(jì)算雙曲正弦
double cosh(double x);?計(jì)算雙曲余弦
double tanh(double x);?計(jì)算雙曲正切
指數(shù)與對(duì)數(shù)
double exp(double x);?求取自然數(shù)e的冪
double sqrt(double x);?開平方
double log(double x);?以e為底的對(duì)數(shù)
double log10(double x);?以10為底的對(duì)數(shù)
double pow(double x, double y);?
計(jì)算以x為底數(shù)的y次冪?
float powf(float x, float y);?
與pow一致,輸入與輸出皆為浮點(diǎn)數(shù)
取整
double ceil(double);?取上整
double floor(double);?取下整
標(biāo)準(zhǔn)化浮點(diǎn)數(shù)
double frexp(double f, int *p);?
標(biāo)準(zhǔn)化浮點(diǎn)數(shù), 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*);?
將參數(shù)的整數(shù)部分通過(guò)指針回傳, 返回小數(shù)部分?
double fmod(double, double);?
返回兩參數(shù)相除的余數(shù)
?
八、<setjmp.h> “非局部跳轉(zhuǎn)”
在該頭文件中定義了一種特別的函數(shù)調(diào)用和函數(shù)返回順序的方式。這種方式不同于以往的函數(shù)調(diào)用和返回順序,?
它允許程序流程立即從一個(gè)深層嵌套的函數(shù)中返回。
<setjmp.h> 中定義了兩個(gè)宏:
int setjmp(jmp_buf env); /*設(shè)置調(diào)轉(zhuǎn)點(diǎn)*/?
longjmp(jmp_buf jmpb, int retval); /*跳轉(zhuǎn)*/?
宏setjmp的功能是將當(dāng)前程序的狀態(tài)保存在結(jié)構(gòu)env ,為調(diào)用宏longjmp設(shè)置一個(gè)跳轉(zhuǎn)點(diǎn)。setjmp將當(dāng)前信息保存在env中供longjmp使用。其中env是jmp_buf結(jié)構(gòu)類型的。?
Demo :
#include? <stdio.h>
#include? <setjmp.h>
staticjmp_buf buf;
voidsecond(void) {
??? printf("second\n");???????
?????? // 打印
??? longjmp(buf,1);???????????
?????? // 跳回setjmp的調(diào)用處
?????? - 使得setjmp返回值為1
}
?void first(void) {
??? second();
??? printf("first\n");?????????
?????? // 不可能執(zhí)行到此行
}
?int main() {??
??? if ( ! setjmp(buf) ) {
??????? first();??????????????
?????? // 進(jìn)入此行前,setjmp返回0
??? } else {?????????????????
?????? // 當(dāng)longjmp跳轉(zhuǎn)回,
?????? setjmp返回1,因此進(jìn)入此行
??????? printf("main\n");?
????????????? // 打印
??? }
???? return 0;
}
直接調(diào)用setjmp時(shí),返回值為0,這一般用于初始化(設(shè)置跳轉(zhuǎn)點(diǎn)時(shí))。以后再調(diào)用longjmp宏時(shí)用env變量進(jìn)行跳轉(zhuǎn)。程序會(huì)自動(dòng)跳轉(zhuǎn)到setjmp宏的返回語(yǔ)句處,此時(shí)setjmp的返回值為非0,由longjmp的第二個(gè)參數(shù)指定。?
一般地,宏setjmp和longjmp是成對(duì)使用的,這樣程序流程可以從一個(gè)深層嵌套的函數(shù)中返回。
?
九、<signal.h>信號(hào)
在signal.h頭文件中,提供了一些函數(shù)用以處理執(zhí)行過(guò)程中所產(chǎn)生的信號(hào)。
宏:
SIG_DFL
SIG_ERR
SIG_IGN
SIGABRT
SIGFPE
SIGILL
SIGINT
SIGSEGV
SIGTERM
函數(shù):
signal();
raise();
變量:
typedefsig_atomic_t
sig_atomic_t?類型是int類型,用于接收signal函數(shù)的返回值。
以SIG_開頭的宏用于定義信號(hào)處理函數(shù)
SIG_DFL?默認(rèn)信號(hào)處理函數(shù)。
SIG_ERR表示一個(gè)錯(cuò)誤信號(hào),當(dāng)signal函數(shù)調(diào)用失敗時(shí)的返回值。
SIG_IGN信號(hào)處理函數(shù),表示忽略該信號(hào)。
SIG開頭的宏是用來(lái)在下列情況下,用來(lái)表示一個(gè)信號(hào)代碼:
SIGABRT異常終止(abort函數(shù)產(chǎn)生)。
SIGFPE浮點(diǎn)錯(cuò)誤(0作為除數(shù)產(chǎn)生的錯(cuò)誤,非法的操作)。
SIGILL非法操作(指令)。
SIGINT交互式操作產(chǎn)生的信號(hào)(如CTRL - C)。
SIGSEGV無(wú)效訪問(wèn)存儲(chǔ)(片段的非法訪問(wèn),內(nèi)存非法訪問(wèn))。
SIGTERM終止請(qǐng)求。
signal?函數(shù)
void(*signal(intsig,void (*func)(int)))(int);
上面的函數(shù)定義中,sig 表示一個(gè)信號(hào)代碼(相當(dāng)于暗號(hào)類別),即是上面所定義的SIG開頭的宏。當(dāng)有信號(hào)出現(xiàn)(即當(dāng)收到暗號(hào))的時(shí)候,參數(shù)func所定義的函數(shù)就會(huì)被調(diào)用。如果func等于SIG_DFL,則表示調(diào)用默認(rèn)的處理函數(shù)。如果等于SIG_IGN,則表示這個(gè)信號(hào)被忽略(不做處理)。如果func是用戶自定義的函數(shù),則會(huì)先調(diào)用默認(rèn)的處理函數(shù),再調(diào)用用戶自己定義的函數(shù)。 自定義函數(shù),有一個(gè)參數(shù),參數(shù)類型為int,用來(lái)表示信號(hào)代碼(暗號(hào)類別)。同時(shí),函數(shù)必須以return、abort、exit 或longjump等語(yǔ)句結(jié)束。當(dāng)自定義函數(shù)運(yùn)行結(jié)束,程序會(huì)繼續(xù)從被終止的地方繼續(xù)運(yùn)行。(除非信號(hào)是SIGFPE導(dǎo)致結(jié)果未定義,則可能無(wú)法繼續(xù)運(yùn)行)
如果調(diào)用signal函數(shù)成功,則會(huì)返回一個(gè)指針,該指針指向?yàn)樗付ǖ男盘?hào)類別的所預(yù)先定義的信號(hào)處理器。?
如果調(diào)用失敗,則會(huì)返回一個(gè)SIG_ERR,同時(shí)errno的值也會(huì)被相應(yīng)的改變。
raise函數(shù)
intraise(int sig);
發(fā)出一個(gè)信號(hào)sig。信號(hào)參數(shù)為SIG開頭的宏。
如果調(diào)用成功,返回0。否則返回一個(gè)非零值。
?
十、<stdarg.h>可變參數(shù)
<stdarg.h>頭文件定義了一些宏,當(dāng)函數(shù)參數(shù)未知時(shí)去獲取函數(shù)的參數(shù)
變量:typedefva_list
宏:
va_start()
va_arg()
va_end()
變量和定義
va_list類型通過(guò)stdarg宏定義來(lái)訪問(wèn)一個(gè)函數(shù)的參數(shù)表,參數(shù)列表的末尾會(huì)用省略號(hào)省略?
聲明:void va_start(va_list ap, last_arg);
用va_arg和va_end宏初始化參數(shù)ap,last_arg是傳給函數(shù)的固定參數(shù)的最后一個(gè),省略號(hào)之前的那個(gè)參數(shù) 注意va_start必須在使用va_arg和va_end之前調(diào)用
聲明:type va_arg(va_list ap, type);
用type類型擴(kuò)展到參數(shù)表的下個(gè)參數(shù)
注意ap必須用va_start初始化,如果沒有下一個(gè)參數(shù),結(jié)果會(huì)是undefined
聲明:void va_end(va_list ap); 允許一個(gè)有參數(shù)表(使用va_start宏)的函數(shù)返回,如果返回之前沒有調(diào)用va_end,結(jié)果會(huì)是undefined。參數(shù)變量列表可能不再使用(在沒調(diào)用va_start的情況下調(diào)用va_end)
?
十一、<stddef.h>一些常數(shù),類型和變量
<stddef.h>頭文件定義了一些標(biāo)準(zhǔn)定義,許多定義也會(huì)出現(xiàn)在其他的頭文件里
宏命令:NULL 和 offsetof()?
變量:
typedef ptrdiff_t
typedef size_t
typedef wchar_t
變量和定義:
ptrdiff_t是兩個(gè)指針相減的結(jié)果
size_t是sizeof一個(gè)關(guān)鍵詞得到的無(wú)符號(hào)整數(shù)值
wchar_t是一個(gè)寬字符常量的大小,是整數(shù)類型
NULL是空指針的常量值
offsetof(type, member-designator);這個(gè)宏返回一個(gè)結(jié)構(gòu)體成員相對(duì)于結(jié)構(gòu)體起始地址的偏移量(字節(jié)為單位),type是結(jié)構(gòu)體的名字,member-designator是結(jié)構(gòu)體成員的名字。
?
十二、<stdio.h>頭文件定義了用于輸入和輸出的函數(shù)、類型和宏。
最重要的類型是用于聲明文件指針的FILE。另外兩個(gè)常用的類型是 size_t和fpos_t,size_t是由運(yùn)算符sizeof產(chǎn)生的無(wú)符號(hào)整類型;fpos_t類型定義能夠唯一說(shuō)明文件中的每個(gè)位置的對(duì)象。由頭部 定義的最有用的宏是EOF,其值代表文件的結(jié)尾。
變量:?
typedef size_t
typedef FILE
typedef fpos_t
常量 :?
NULL?空值
_IOFBF?表示完全緩沖?
_IOLBF?表示線緩沖?
_IONBF?表示無(wú)緩存
BUFSIZ?setbuf函數(shù)所使用的緩沖區(qū)的大小
EOF?EOF是負(fù)整數(shù)表示ENDOF FILE
FOPEN_MAX?(20)同時(shí)打開的文件的最大數(shù)量
FILENAME_MAX?文件名的最大長(zhǎng)度
L_tmpnam整數(shù),最大長(zhǎng)度的臨時(shí)文件名
SEEK_CUR取得目前文件位置
SEEK_END將讀寫位置移到文件尾時(shí)
SEEK_SET將讀寫位置移到文件開頭
TMP_MAXtmpnam最多次數(shù)
stderr標(biāo)準(zhǔn)錯(cuò)誤流,默認(rèn)為屏幕, 可輸出到文件。
stdin標(biāo)準(zhǔn)輸入流,默認(rèn)為鍵盤
stdout標(biāo)準(zhǔn)輸出流,默認(rèn)為屏幕?
所有函數(shù)(點(diǎn)擊可查看介紹和DEMO) :?
?? clearerr();?復(fù)位錯(cuò)誤標(biāo)志
?? fclose();?關(guān)閉一個(gè)流。
?? feof();?檢測(cè)文件結(jié)束符
?? ferror();?檢查流是否有錯(cuò)誤
?? fflush();更新緩沖區(qū)
?? fgetpos();?移動(dòng)文件流的讀寫位置
?? fopen();打開文件
?? fread();?從文件流讀取數(shù)據(jù)
?? freopen();?打開文件
?? fseek();?移動(dòng)文件流的讀寫位置
?? fsetpos();定位流上的文件指針
?? ftell();?取得文件流的讀取位置
?? fwrite();?將數(shù)據(jù)寫至文件流
?? remove();?刪除文件
?? rename();?更改文件名稱或位置
?? rewind();?重設(shè)讀取目錄的位置為開頭位置
?? setbuf();?把緩沖區(qū)與流相聯(lián)
?? setvbuf();?把緩沖區(qū)與流相關(guān)
?? tmpfile();?以wb+形式創(chuàng)建一個(gè)臨時(shí)二進(jìn)制文件
?? tmpnam();? 產(chǎn)生一個(gè)唯一的文件名
?? fprintf();?格式化輸出數(shù)據(jù)至文件
?? fscanf();?格式化字符串輸入
?? printf();?格式化輸出數(shù)據(jù)
?? scanf();?格式輸入函數(shù)
?? sprintf();?格式化字符串復(fù)制
?? sscanf();?格式化字符串輸入
?? vfprintf();?格式化輸出數(shù)據(jù)至文件
?? vprintf();?格式化輸出數(shù)據(jù)
?? vsprintf();?格式化字符串復(fù)制
?? fgetc();?由文件中讀取一個(gè)字符
?? fgets();?文件中讀取一字符串
?? fputc();?將一指定字符寫入文件流中
?? fputs();?將一指定的字符串寫入文件內(nèi)
?? getc();?由文件中讀取一個(gè)字符
?? getchar();?由標(biāo)準(zhǔn)輸入設(shè)備內(nèi)讀進(jìn)一字符
?? gets();?由標(biāo)準(zhǔn)輸入設(shè)備內(nèi)讀進(jìn)一字符串
?? putc();?將一指定字符寫入文件中
?? putchar();?將指定的字符寫到標(biāo)準(zhǔn)輸出設(shè)備
?? puts();?送一字符串到流stdout中
?? ungetc();? 將指定字符寫回文件流中
?? perror();?打印出錯(cuò)誤原因信息字符串
?
十三、<stdlib.h>實(shí)用功能
<stdlib.h>頭文件里包含了C語(yǔ)言的中最常用的系統(tǒng)函數(shù)
宏:
NULL?空
EXIT_FAILURE?失敗狀態(tài)碼
EXIT_SUCCESS?成功狀態(tài)碼
RAND_MAX?rand的最大返回值
MB_CUR_MAX?多字節(jié)字符中的最大字節(jié)數(shù)
變量:
typedefsize_t是unsignedinteger類型
typedefwchar_t?一個(gè)寬字符的大小
structdiv_t?是結(jié)構(gòu)體類型 作為div函數(shù)的返回類型
structldiv_t是結(jié)構(gòu)體類型 作為ldiv函數(shù)的返回類型
函數(shù):
字符串函數(shù)
atof();?將字符串轉(zhuǎn)換成浮點(diǎn)型數(shù)
atoi();?將字符串轉(zhuǎn)換成整型數(shù)
atol();?將字符串轉(zhuǎn)換成長(zhǎng)整型數(shù)
strtod();?將字符串轉(zhuǎn)換成浮點(diǎn)數(shù)
strtol();?將字符串轉(zhuǎn)換成長(zhǎng)整型數(shù)
strtoul();?將字符串轉(zhuǎn)換成無(wú)符號(hào)長(zhǎng)整型數(shù)
?
?
內(nèi)存控制函數(shù)
calloc();?配置內(nèi)存空間
free();?釋放原先配置的內(nèi)存
malloc();?配置內(nèi)存空間
realloc();?重新分配主存
?
環(huán)境函數(shù)
abort();?異常終止一個(gè)進(jìn)程
atexit();設(shè)置程序正常結(jié)束前調(diào)用的函數(shù)
exit();?正常結(jié)束進(jìn)程
getenv();?取得環(huán)境變量?jī)?nèi)容
system();?執(zhí)行shell命令
?
?
搜索和排序函數(shù)
bsearch();?二元搜索
qsort();?利用快速排序法排列數(shù)組
?
數(shù)學(xué)函數(shù)
abs();?計(jì)算整型數(shù)的絕對(duì)值
div();?將兩個(gè)整數(shù)相除, 返回商和余數(shù)
labs();?取長(zhǎng)整型絕對(duì)值
ldiv();兩個(gè)長(zhǎng)整型數(shù)相除, 返回商和余數(shù)
rand();?隨機(jī)數(shù)發(fā)生器
srand();?設(shè)置隨機(jī)數(shù)種子
?
多字節(jié)函數(shù)
mblen();?根據(jù)locale的設(shè)置確定字符的字節(jié)數(shù)
mbstowcs();?把多字節(jié)字符串轉(zhuǎn)換為寬字符串
mbtowc();?把多字節(jié)字符轉(zhuǎn)換為寬字符
wcstombs();?把寬字符串轉(zhuǎn)換為多字節(jié)字符串
wctomb();?把寬字符轉(zhuǎn)換為多字節(jié)字符
<string.h>字符串函數(shù)
<stdlib.h>頭文件里包含了C語(yǔ)言的最常用的字符串操作函數(shù)
宏:
NULL?空
變量:
typedefsize_t
函數(shù):
memchr();在某一內(nèi)存范圍中查找一特定字符
memcmp();?比較內(nèi)存內(nèi)容
memcpy();?拷貝內(nèi)存內(nèi)容
memmove();?拷貝內(nèi)存內(nèi)容
memset();?將一段內(nèi)存空間填入某值
strcat();?連接兩字符串
strncat();?連接兩字符串
strchr();?查找字符串中第一個(gè)出現(xiàn)的指定字符
strcmp();?比較字符串
strncmp();比較2個(gè)字符串的前N個(gè)字符
strcoll();?采用目前區(qū)域的字符排列比較字符串
strcpy();?拷貝字符串
strncpy();?拷貝字符串
strcspn();?返回字符連續(xù)不含指定字符的字符數(shù)
strerror();?返回錯(cuò)誤原因的描述字符串
strlen();?計(jì)算字符串長(zhǎng)度
strpbrk();?查找字符串中第一個(gè)出現(xiàn)的指定字符
strrchr();?查找字符串中最后出現(xiàn)的指定字符
strspn();返回字符串連續(xù)不含指定字符的字符數(shù)
strstr();?在一字符串中查找指定的字符串
strtok();?分割字符串
strxfrm();?轉(zhuǎn)換字符串
?
十四、<time.h>時(shí)間和日期函數(shù)
<time.h>是C標(biāo)準(zhǔn)函數(shù)庫(kù)中獲取時(shí)間與日期、對(duì)時(shí)間與日期數(shù)據(jù)操作及格式化的頭文件。
宏:
NULL?null是一個(gè)null指針常量的值
CLOCKS_PER_SEC?每秒的時(shí)鐘數(shù)
變量:
typedefsize_t?類型定義
typedefclock_t類型定義
structtm?結(jié)構(gòu)體
struct tm?
{
int tm_sec;?/* 秒 – 取值區(qū)間為[0,59] */
int tm_min;?/* 分 - 取值區(qū)間為[0,59] */
int tm_hour;?/* 時(shí) - 取值區(qū)間為[0,23] */
int tm_mday;?/* 一個(gè)月中的日期 - 取值區(qū)間為[1,31] */
int tm_mon;?/* 月份(從一月開始,0代表一月) - 取值區(qū)間為[0,11] */
int tm_year;?/* 年份,其值等于實(shí)際年份減去1900*/
int tm_wday;?/* 星期 – 取值區(qū)間為[0,6],其中0代表星期天,1代表星期一,以此類推 */
int tm_yday;?/* 從每年的1月1日開始的天數(shù) – 取值區(qū)間為[0,365],其中0代表1月1日,1代表1月2日,以此類推 */
int tm_isdst;?/* 夏令時(shí)標(biāo)識(shí)符,實(shí)行夏令時(shí)的時(shí)候,tm_isdst為正。不實(shí)行夏令時(shí)的進(jìn)候,tm_isdst為0;不了解情況時(shí),tm_isdst()為負(fù)。*/?
};
函數(shù):
asctime();?將時(shí)間和日期以字符串格式表示
clock();?確定處理器時(shí)間
ctime();?把日期和時(shí)間轉(zhuǎn)換為字符串
difftime();?計(jì)算兩個(gè)時(shí)刻之間的時(shí)間差
gmtime();?把日期和時(shí)間轉(zhuǎn)換為(GMT)時(shí)間
localtime();取得當(dāng)?shù)啬壳皶r(shí)間和日期
mktime();將時(shí)間結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)換成經(jīng)過(guò)的秒數(shù)
strftime();?將時(shí)間格式化
time();?取得目前的時(shí)間
?
總結(jié)
- 上一篇: Tomcat日志
- 下一篇: tomcat 日志切割