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
}