1. 程式人生 > >2.2 C語言標準庫

2.2 C語言標準庫

標準庫
                標準標頭檔案:
                <assert.h>  <float.h>   <math.h>    <stdarg.h>  <stdlib.h>
                <ctype.h>   <limits.h>  <setjmp.h>  <stddef.h>  <string.h>
                <errno.h>   <locale.h>  <signal.h>  <stdio.h>   <time.h>
                
                <string.h>{字串函式
                    typedef char* s,t;   typedef const char* cs,ct;
                    char *strcpy(s,ct);        拷貝
                    char *strncpy(s,ct,n);    
                    char *strcat(s,ct);        連線
                    char *strncat(s,ct,n);
                    int strcmp(cs,ct);        比較
                    int strncmp(cs,ct,n);
                    char *strchr(cs,c);        放回c字元在cs中第一次出現的位置指標
                    char *strrchr(cs,c);    放回c字元在cs中最後出現的位置指標
                    size_t strspn(cs,ct);    通過c字元放回cs字首
                    size_t strcspn(cs,ct);
                    char *strpbrk(cs,ct);
                        放回一個指向字串ct中的任意字元第一次在cs中的位置指標
                    char *strstr(cs,ct);    放回ct第一次出現在cs中的位置
                    size_t strlen(cs);
                    char *strerror(n);        放回一個指向與錯誤編號n對應的錯誤資訊字串的指標
                    char *strtok(s,ct);        用ct字元切割字串
                    
                    void *memcpy(s,ct,n);    拷貝記憶體
                    void *memmove(s,ct,n);    
                        移動記憶體,與memcpy相似,不同在於memove記憶體空間重疊時能正確執行
                    int memcmp(cs,ct,n);    比較記憶體
                    void *memchr(cs,c,n);    放回c在cs的前n個字元中第一次出現的位置,
                    void *memset(s,c,n);    設定記憶體
                }
            
                <math.h>{數學函式
                    typedef double x,y; typedef int n; 函式返回值均為double型別
                    sin(x);        
                    cos(x);        
                    tan(x);        
                    asin(x);    sin-1(x)
                    acos(x);    cos-1(x)
                    atan(x);    tan-1(x)
                    atan2(y,x);    tan-1(y/x)
                    sinh(x);    x的雙曲正弦值
                    cosh(x);    x的雙曲餘弦值
                    tanh(x);    x的雙曲正切值
                    exp(x);        e的x次方
                    log(x);        ln(x),x>0
                    log10(x);    log10(x),x>0
                    pow(x,y);    x的y次方
                    sqrt(x);    x的平方根,x>=0
                    ceil(x);    不小於x的最小整型數,其中x的型別為double
                    floor(x);    不大於x的最大整型數,其中x的型別為double
                    fabs(x);    x的絕對值
                    ldexp(x,n);    x*(2的n次方)
                    frexp(x, int *ip);    
                    modf(x, double *ip);    
                        把x分成整數和小數兩個部分,整數儲存在ip函式放回小數部分
                    fmod(x,y);    求浮點餘數
                }
                
                <stdlib.h>{實用函式
                    double atof(const char *s);    字串轉換為double型別。
                    int atoi(const char *s);    字串轉換為int型別。
                    long atol(const char *s);    字串轉換為long型別。
                    double strtod(const char *s, char **endp);    
                        字串轉換為double型別,跳過前面的空格,endp指向s的字尾
                    long strtol(const char *s, char **endp, int base);
                        字串轉換為long型別,跳過前面的空格,endp指向s的字尾,base表示進位制。
                    unsigned long strtoul(const char *s, char **endp, int base);
                        字串轉換為unsigned long型別。
                    int rand(void);        生成一個偽隨機數。
                    void srand(unsigned int seed);    設定偽隨機數的種子。
                    void *calloc(size_t nobj, size_t size);
                    void *malloc(size_t size);
                        colloc與malloc類似,但是主要的區別是儲存在已分配的記憶體空間中的值預設為0,使用malloc時,已分配的記憶體中可以是任意的值.
                    void *realloc(void *p, size_t size);    重新給p指向的記憶體空間分配記憶體
                    void free(void *p);  釋放記憶體,p=NULL時不會出錯。重釋放會導致程式崩潰
                    void abort(void);
                    void exit(int status);    使程式正常結束,清空緩衝並且會呼叫atexit繫結的函式
                    int atexit(void (*fcn)(void));    程式結束執行fcn函式,成功返回0
                    int system(const char *s);
                    char *getenv(const char *name);    獲得環境變數
                    void *bsearch(const void *key, const void *base,size_t n, size_t size,
                        int (*cmp)(const void *keyval, const void *datum));
                    void qsort(void *base, size_t n, size_t size,
                        int (*cmp)(const void *, const void *));
                        將陣列進行升序排序
                    int abs(int n);        求絕對值
                    long labs(long n);    求絕對值
                    div_t div(int num, int denom);    求num/denom的商和餘數
                    ldiv_t ldiv(long num, long denom);
                    
                }
                
                <assert.h>{斷言,它是一個巨集
                    void assert(int expression);   該巨集只在debug版的編譯器中起作用。
                        如果expression為0時,該巨集在stderr中列印錯誤資訊,並結束程式。
                }
                
                <stdarg.h>{可變引數表,不知道幹嘛的
                    va_start(va_list ap, lastarg);
                    type va_arg(va_list ap, type);
                    void va_end(va_list ap);
                }
                
                <setjmp.h>{非區域性跳轉
                    int setjmp(jmp_buf env);    
                }
                
                <signal.h>{訊號
                    void (*signal(int sig, void (*handler)(int)))(int);繫結訊號處理函式。
                    int raise(int sig);        向程式傳送訊號sig,成功放回0
                    有效訊號:
                        SIGABRT
                        SIGFPE
                        SIGILL
                        SIGINT
                        SIGSEGV
                        SIGTERM
                }
                
                <time.h>{日期和時間函式
                    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-11)
                        int tm_year;    年
                        int tm_wday;    星期(0-6)
                        int tm_yday;    那一年的第幾天(0-365)
                        int tm_isdst;    夏令時標記
                    }
                    clock_t clock(void);    放回程式執行後佔用的處理器時間,單位為秒。
                    time_t time(time_t *tp);    放回當前日期
                    double difftime(time_t time2, time_t time1);    time2-time1的值(秒),
                    time_t mktime(struct tm *tp);   將tm型別時間轉換為time_t型別
                    char *asctime(const struct tm *tp);
                        將tm轉換為字串形式,Sun Jan 3 15:14:13 1988\n\0
                    char *ctime(const time_t *tp);  將time_t轉換為當地時間,格式如上。
                    struct tm *gmtime(const time_t *tp);  將time_t轉換為協調時間時UCT
                    struct tm *localtime(const time_t *tp);  將time_t型別轉換為tm型別
                    size_t strftime(char *s, size_t smax, const char *fmt, 
                        const struct tm*tp);   
                }
                
                <limits.h>{一些常量(不同環境可能不同,這裡列出最小值)
                    資料型別常量:
                    CHAR_BIT    8
                    CHAR_MAX    255或+127
                    CHAR_MIN    0或-127
                    INT_MAX     32767
                    INT_MIN     -32767
                    LONG_BIT    32
                    LONG_MAX    2147483647
                    LONG_MIN    -2147483647
                    SCHAR_MAX   +127
                    SCHAR_MIN   -127
                    SHRT_MAX    +32767
                    SHRT_MIN    -32767
                    UCHAR_MAX   255
                    UINT_MAX    65535
                    ULONG_MAX   4294967295
                    USHRT_MAX   65535
                }
                
                <float.h>{浮點算術運算相關常量(不同環境可能不同,這裡列出最小值)
                  float型別相關的常量:
                    FLT_RADIX   2           指數表示的基數,如2、16
                    FLT_ROUNDS
                    FLT_DIG     6           表示精度
                    FLT_EPSILON 1E-5        最小的數,滿足1.0+x != 1.0
                    FLT_MANT_DIG            
                    FLT_MAX     1E+37       最大的浮點數
                    FLT_MAX_EXP
                    FLT_MIN     1E-37
                    FLT_MIN_EXP
                    
                  double相關的常量:
                    DBL_DIG     10          表示精度
                    DBL_EPSILON 1E-9
                    DBL_MANT_DIG
                    DBL_MAX     1E+37       最大的浮點數
                    DBL_MAX_EXP
                    DBL_MIN     1E-37
                    DBL_MIN_EXP
                }