stdio.h(standard input & output)
标准输入输出
stdlib.h (standard library)
标准库头文件。
里面定义了五种类型、一些宏和通用工具函数。类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等; 常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。
string.h
头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。
-
库变量类型
size_t
这是无符号整数类型,它是 sizeof 关键字的结果。 -
库宏
NULL
这个宏是一个空指针常量的值。 -
库函数
- strcat()函数
*原型:char *strcat(char *dest, const char src)
作用:把src所指向的字符串追加到dest 所指向的字符串的结尾。 - strcmp()函数
*原型:int strcmp(const char *str1, const char str2)
作用:把 str1 所指向的字符串和 str2 所指向的字符串进行比较。 - strcpy()函数
*原型:char *strcpy(char *dest, const char src)
作用:把 src 所指向的字符串复制到 dest。 - strlen()函数
*原型:size_t strlen(const char str)
作用:计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。 - memchr()函数
*原型:void *memchr(const void str, int c, size_t n)
作用:在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。 - memcmp()函数
*原型:int memcmp(const void *str1, const void str2, size_t n)
作用:把 str1 和 str2 的前 n 个字节进行比较。 - memcpy()函数
*原型:void *memcpy(void *dest, const void src, size_t n)
作用:从 src 复制 n 个字符到 dest。 - memmove()函数
*原型:void *memmove(void *dest, const void src, size_t n)
作用:另一个用于从 src 复制 n 个字符到 dest 的函数。 - memset()函数
*原型:void *memset(void str, int c, size_t n)
作用:复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。 - strncat()函数
*原型:char *strncat(char *dest, const char src, size_t n)
作用:把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。 - strchr()函数
*原型:char *strchr(const char str, int c)
作用:在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。 - strncmp()函数
*原型:int strncmp(const char *str1, const char str2, size_t n)
作用:把 str1 和 str2 进行比较,最多比较前 n 个字节。 - strcoll()函数
*原型:int strcoll(const char *str1, const char str2)
作用:把 str1 和 str2 进行比较,结果取决于 LC_COLLATE 的位置设置。 - strncpy()函数
*原型:char *strncpy(char *dest, const char src, size_t n)
作用:把 src 所指向的字符串复制到 dest,最多复制 n 个字符。 - strcspn()函数
*原型:size_t strcspn(const char str1, const char str2)
作用:检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符。 - strerror()函数
*原型:char strerror(int errnum)
作用:从内部数组中搜索错误号errnum,并返回一个指向错误消息字符串的指针。 - strpbrk()函数
*原型:char *strpbrk(const char *str1, const char str2)
作用:检索字符串 str1 中第一个匹配字符串 str2 中字符的字符,不包含空结束字符。也就是说,依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回该字符位置。 - strrchr()函数
*原型:char *strrchr(const char str, int c)
作用:在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。 - strspn()函数
*原型:size_t strspn(const char *str1, const char str2)
作用:检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。 - strstr()函数
*原型: char *strstr(const char *haystack, const char needle)
作用:在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。 - strtok()函数
*原型: char *strtok(char *str, const char delim)
作用:分解字符串 str 为一组字符串,delim 为分隔符。 - strxfrm()函数
*原型:size_t strxfrm(char *dest, const char src, size_t n)
作用:根据程序当前的区域选项中的 LC_COLLATE 来转换字符串 src 的前 n 个字符,并把它们放置在字符串 dest 中。
math.h
头文件中声明了常用的一些数学运算
-
三角函数
double sin(double);正弦
double cos(double);余弦
double tan(double);正切 -
反三角函数
double asin (double); 结果介于[-PI/2,PI/2]
double acos (double); 结果介于[0,PI]
double atan (double); 反正切(主值),结果介于[-PI/2,PI/2]
double atan2 (double,double); 反正切(整圆值),结果介于[-PI,PI] -
双曲三角函数
double sinh (double);
double cosh (double);
double tanh (double); -
指数与对数
double frexp(double value,int *exp);这是一个将value值拆分成小数部分f和(以2为底的)指数部分exp,并返回小数部分f,即f·2^exp。其中f取值在0.5~1.0范围或者0。
double ldexp(double x,int exp);这个函数刚好跟上面那个frexp函数功能相反,它的返回值是x*2^exp
double modf(double value,double *iptr);拆分value值,返回它的小数部分,iptr指向整数部分。
double log (double); 以e为底的对数
double log10 (double);以10为底的对数
double pow(double x,double y);计算x的y次幂
float powf(float x,float y); 功能与pow一致,只是输入与输出皆为单精度浮点数
double exp (double);求取自然数e的幂
double sqrt (double);开平方根 -
取整
double ceil (double); 取上整,返回不比x小的最小整数
double floor (double); 取下整,返回不比x大的最大整数,即 高斯函数[x] -
绝对值
int abs(int i); 求整型的绝对值
double fabs (double);求实型的绝对值
double cabs(struct complex znum);求复数的绝对值 -
标准化浮点数
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); 返回两参数相除的余数 -
其他
double hypot(double x,double y);已知直角三角形两个直角边长度,求斜边长度
double ldexp(double x,int exponent);计算x*(2的exponent次幂)
double poly(double x,int degree,double coeffs []);计算多项式
int matherr(struct exception *e);数学错误计算处理程序
source: 《C & C++ Code Capsules》
assert.h
头文件提供了一个名为 assert 的宏
void assert(int expression)
这实际上是一个宏,不是一个函数,可用于在 C 程序中添加诊断。它可用于验证程序做出的假设,并在假设为假时输出诊断消息。
limits.h
头文件决定了各种变量类型的各种属性。定义在该头文件中的宏限制了各种变量类型(比如 char、int 和 long)的值。
这些限制指定了变量不能存储任何超出这些限制的值,例如一个无符号可以存储的最大值是 255。
库宏
宏 | 值 | 描述 |
---|---|---|
CHAR_BIT | 8 | 定义一个字节的比特数。 |
SCHAR_MIN | -128 | 定义一个有符号字符的最小值。 |
SCHAR_MAX | 127 | 定义一个有符号字符的最大值。 |
UCHAR_MAX | 255 | 定义一个无符号字符的最大值。 |
CHAR_MIN | 0 | 定义类型 char 的最小值,如果 char 表示负值,则它的值等于 SCHAR_MIN,否则等于 0。 |
CHAR_MAX | 127 | 定义类型 char 的最大值,如果 char 表示负值,则它的值等于 SCHAR_MAX,否则等于 UCHAR_MAX。 |
MB_LEN_MAX | 1 | 定义多字节字符中的最大字节数。 |
SHRT_MIN | -32768 | 定义一个短整型的最小值。 |
SHRT_MAX | +32767 | 定义一个短整型的最大值。 |
USHRT_MAX | 65535 | 定义一个无符号短整型的最大值。 |
INT_MIN | -2147483648 | 定义一个整型的最小值。 |
INT_MAX | 2147483647 | 定义一个整型的最大值。 |
UINT_MAX | 4294967296 | 定义一个无符号整型的最大值。 |
LONG_MIN | -9223372036854775808 | 定义一个长整型的最小值。 |
LONG_MAX | 9223372036854775807 | 定义一个长整型的最大值。 |
ULONG_MAX | 1.8446744e+19 | 定义一个无符号长整型的最大值。 |
实例
#include <stdio.h>
#include <limits.h>
int main()
{
printf("The number of bits in a byte %d\n", CHAR_BIT);
printf("The minimum value of SIGNED CHAR = %d\n", SCHAR_MIN);
printf("The maximum value of SIGNED CHAR = %d\n", SCHAR_MAX);
printf("The maximum value of UNSIGNED CHAR = %d\n", UCHAR_MAX);
printf("The minimum value of SHORT INT = %d\n", SHRT_MIN);
printf("The maximum value of SHORT INT = %d\n", SHRT_MAX);
printf("The minimum value of INT = %d\n", INT_MIN);
printf("The maximum value of INT = %d\n", INT_MAX);
printf("The minimum value of CHAR = %d\n", CHAR_MIN);
printf("The maximum value of CHAR = %d\n", CHAR_MAX);
printf("The minimum value of LONG = %ld\n", LONG_MIN);
printf("The maximum value of LONG = %ld\n", LONG_MAX);
return(0);
}
运行结果
ctype.h
定义了一批C语言字符分类函数(C character classification functions),用于测试字符是否属于特定的字符类别,如字母字符、控制字符等等。既支持单字节字符,也支持宽字符。
库函数
- 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 isprint(int c)
该函数检查所传的字符是否是可打印的。 - int ispunct(int c)
该函数检查所传的字符是否是标点符号字符。 - int isspace(int c)
该函数检查所传的字符是否是空白字符。 - int isupper(int c)
该函数检查所传的字符是否是大写字母。 - int isxdigit(int c)
该函数检查所传的字符是否是十六进制数字。 - int tolower(int c)
该函数把大写字母转换为小写字母。 - int toupper(int c)
该函数把小写字母转换为大写字母。
<time.h>
头文件定义了四个变量类型、两个宏和各种操作日期和时间的函数。
库变量
- size_t
是无符号整数类型,它是 sizeof 关键字的结果。 - clock_t
这是一个适合存储处理器时间的类型。 - time_t is
这是一个适合存储日历时间类型。 - struct tm
这是一个用来保存时间和日期的结构。
tm 结构的定义如下:
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; /* 自 1900 年起的年数 */
int tm_wday; /* 一周中的第几天,范围从 0 到 6 */
int tm_yday; /* 一年中的第几天,范围从 0 到 365 */
int tm_isdst; /* 夏令时 */
};
库宏
- NULL
这个宏是一个空指针常量的值。 - CLOCKS_PER_SEC
这个宏表示每秒的处理器时钟个数。
库函数
- char *asctime(const struct tm *timeptr)
返回一个指向字符串的指针,它代表了结构 timeptr 的日期和时间。 - clock_t clock(void)
返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。 - char *ctime(const time_t *timer)
返回一个表示当地时间的字符串,当地时间是基于参数 timer。 - double difftime(time_t time1, time_t time2)
返回 time1 和 time2 之间相差的秒数 (time1-time2)。 - struct tm *gmtime(const time_t *timer)
timer 的值被分解为 tm 结构,并用协调世界时(UTC)也被称为格林尼治标准时间(GMT)表示。 - struct tm *localtime(const time_t *timer)
timer 的值被分解为 tm 结构,并用本地时区表示。 - time_t mktime(struct tm *timeptr)
把 timeptr 所指向的结构转换为一个依据本地时区的 time_t 值。 - size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)
根据 format 中定义的格式化规则,格式化结构 timeptr 表示的时间,并把它存储在 str 中。 - time_t time(time_t *timer)
计算当前日历时间,并把它编码成 time_t 格式。