跳转至

第二十三章 库对数值和字符数据的支持


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有两种可能值:

  1. EDOM:代表定义域错误(Linux下值为33),即参数取值不对,比如给sqrt传一个负数。
  2. ERANGE:代表取值范围错误(返回值)(Linux下值为34),无法用double来表示了。比如exp(1000)。(PS:不是所有的数学函数出现返回值为无穷大时都会置errno为ERANGE)

ctype.h:字符处理

ctype.h提供了两类对字符进行处理的:

  1. 测试字符性质
  2. 对字符进行大小写转换

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);