第二十三章 库对数值和字符数据的支持
float.h:浮点型的特性
提供了用来定义浮点型的范围及精度的宏。
limits.h:整型取值范围
仅定义了每种整数类型的取值范围的宏。
math.h:数学计算
math.h里的函数处理的都是浮点类型的数值。
在 UNIX/Linux 下编译,需要指明连接 math 库:-lm
math.h中定义的函数包含下面5种类型:
-
三角函数 sin cos tan acos asin atan atan2
-
双曲函数 cosh sinh tanh
-
指数和对数函数 exp log ...
-
幂函数 pow sqrt
-
就近取整函数,绝对值函数和取余函数 ceil fabs floor fmod
错误
在math.h里声明的函数,如果出现错误(可能是参数不对),会把错误码存到errno。且若函数返回值大于double的最大值,那么函数会返回一个特殊值HUGE_VAL(double类型表示无穷大,Linux下输出成inf)。
errno有两种可能值:
- EDOM:代表定义域错误(Linux下值为33),即参数取值不对,比如给sqrt传一个负数。
- ERANGE:代表取值范围错误(返回值)(Linux下值为34),无法用double来表示了。比如exp(1000)。(PS:不是所有的数学函数出现返回值为无穷大时都会置errno为ERANGE)
ctype.h:字符处理
ctype.h提供了两类对字符进行处理的:
- 测试字符性质
- 对字符进行大小写转换
string.h:字符串处理
这些函数的参数的合法性需要程序员来保证。
复制函数
void *memcpy(void *dest, const void *src, size_t n);
char *strcpy(char *dest, const char *src);
char *strncpy(char *dest, const char *src, size_t n);
拼接函数
char *strcat(char *dest, const char *src);
char *strncat(char *dest, const char *src, size_t n);
比较函数
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
搜索函数
char *strchr(const char *s, int c);
void *memchr(const void *s, int c, size_t n);
char *strrchr(const char *s, int c);
char *strtok(char *str, const char *delim);
其它函数
void *memset(void *s, int c, size_t n);
size_t strlen(const char *s);