常用函数

7.8. 其它函数

标准库提供了很多功能各异的函数。本节将对其中特别有用的函数做一个简要的概述。
更详细的信息以及其它许多没有介绍的函数请参见附录 B。

7.8.1. 字符串操作函数

strcat(s, t)         将 t 指向的字符串连接到 s 指向的字符串的末尾
strncat(s, t, n)     将 t 指向的字符串中前 n 个字符连接到 s 指向的字符串的末尾
strcmp(s, t)         if s<t return <0, s==t return 0, s>t return >0
strncmp(s, t, n)     同 strcmp 相同,但只在前 n 个字符中比较
strcpy(s, t)         将 t 指向的字符串复制到 s 指向的位置
strncpy(s, t, n)     将 t 指向的字符串中前 n 个字符复制到 s 指向的位置
strlen(s)            返回 s 指向的字符串的长度
strchr(s, c)         在 s 指向的字符串中查找 c,若找到,则返回指向它第一次出现的位置的指针,否则返回 NULL
strrchr(s, c)        s 指向的字符串中查找 c,若找到,则返回指向它最后一次出现的位置的指针,否则返回 NULL

7.8.2. 字符类别测试和转换函数

头文件

isalpha(c)c 是字母,则返回一个非 0 值,否则返回 0
isupper(c)c 是大写字母,则返回一个非 0 值,否则返回 0
islower(c)c 是小写字母,则返回一个非 0 值,否则返回 0
isdigit(c)c 是数字,则返回一个非 0 值,否则返回 0
isalnum(c)isalpha(c)isdigit(c),则返回一个非 0 值,否则返回 0
isspace(c)c 是空格、横向制表符、换行符、回车符,换页符或纵向制表符,则返回一个非 0 值
toupper(c)        返回 c 的大写形式
tolower(c)        返回 c 的小写形式

7.8.3. ungetc 函数

标准库提供了一个称为 ungetc 的函数,它与第 4 章中编写的函数 ungetch 相比功能更
受限制。
int ungetc(int c, FILE *fp)
该函数将字符 c 写回到文件 fp 中。如果执行成功,则返回 c,否则返回 EOF。每个文件只能
接收一个写回字符。ungetc 函数可以和任何一个输入函数一起使用,比如 scanf、getc 或
getchar。

7.8.4. 命令执行函数

函数 system(char* s)执行包含在字符申 s 中的命令,然后继续执行当前程序。s 的
内容在很大程度上与所用的操作系统有关。下面来看一个 UNIX 操作系统环境的小例子。语

system(“date”);
将执行程序 date,它在标准输出上打印当天的日期和时间。system 函数返回一个整型的状
态值,其值来自于执行的命令,并同具体系统有关。在 UNIX 系统中,返回的状态是 exit 的
返回值。

7.8.5. 存储管理函数

函数 malloc 和 calloc 用于动态地分配存储块。函数 malloc 的声明如下:
void *malloc(size_t n)
当分配成功时,它返回一个指针,指针指向 n 字节长度的未初始化的存储空间,否则返回
NULL。函数 calloc 的声明为
void *calloc(size_t n, size_t size)
当分配成功时,它返回一个指针,该指针指向的空闲空间足以容纳由 n 个指定长度的对象组成的数组,否则返回 NULL, 该存储空间被初始化为 0。
根据请求的对象类型,malloc 或 calloc 函数返回的指针满足正确的对齐要求。下面的
例子进行了类型转换:
int *ip;
ip = (int *) calloc(n, sizeof(int));
free(p)函数释放 p 指向的存储空间,其中,p 是此前通过调用 malloc 或 calloc 函数得到的指针。 存储空间的释放顺序没有什么限制, 但是, 如果释放一个不是通过调用 malloc或 calloc 函数得到的指针所指向的存储空间,将是一个很严重的错误。使用已经释放的存储空间同样是错误的。下面所示的代码是一个很典型的错误代码段,它通过一个循环释放列表中的项目:

for (p = head; p != NULL; p = p->next) /* WRONG */
free(p);
正确的处理方法是,在释放项目之前先将一切必要的信息保存起来,如下所示:
for (p = head; p != NULL; p = q) {
q = p->next;
free(p);
}
8.7 节给出了一个类似于 malloc 函数的存储分配程序的实现。该存储分配程序分配的存储块可以以任意顺序释放。

7.8.6. 数学函数

sin(x)      x 的正弦函数,其中 x 用弧度表示
cos(x)      x 的余弦函数,其中 x 用弧度表示
atan2(y, x) y/x 的反正切函数,其中,xy 用弧度表示
exp(x)      指数函数 ex
log(x)      x 的自然对数(以 e 为底) ,其中,x>0
log10(x)    x 的常用对数(以 10 为底) ,其中,x>0
pow(x, y)   计算 xy的值
sqrt(x)     x 的平方根(x≥0)
fabs(x)     x 的绝对值

7.8.7. 随机数发生器函数

函数 rand()生成介于 0 和 RAND_MAX 之间的伪随机整数序列。其中 `RAND_MAX` 是在头文件<stdlib.h>中定义的符号常量。下面是一种生成大于等于 0 但小于 1 的随机浮点数的方法:
`#define frand() ((double) rand() / (RAND_MAX+1.0))`
(如果所用的函数库中已经提供了一个生成浮点随机数的函数,那么它可能比上面这个函数具有更好的统计学特性。 )
函数 srand(unsigned)设置 rand 函数的种子数。我们在 2.7 节中给出了遵循标准的randsrand 函数的可移植的实现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值