标准库函数2

非本地跳转”setjmp.h”

setjmp和longjmp函数提供类似goto语言的机制
int setjmp(jmp_buf state);
返回值:若直接调用则返回0,若从longjmp调用返回则返回非0值
void longjmp(jump_buf state,int value);

include “setjmp.h>

include”stdio.h>

jmp_buf jmpbuffer;
void main()
{
int a= setjmp(jmpbuffer);
int i;
int j;
while (a == 0)
{
for (i = 0; i <= 9; i++)
{
for (j = 0; j <= 9; j++)
{
printf(“%d,%d\n”, i, j);
if (i == 2 && j == 5)
{
longjmp(jmpbuffer, 1);
}
}
}
}
}
而直接用a=0改没用;

信号

信号名”signal.h”

SIGABRT 程序请求异常终止
SIGFPE 发生一个算术错误
SIGILL 检测到非法指令
SIGSEGV 检测到对内存的非法访问
SIGINT 收到一个交互性注意信号
SIGTERM 收到一个终止程序的请求

处理信号”signal.h”

int raise(int sig); 显示引发一个信号

volatile数据:防止编译器以一种可能修改程序含义的方式”优化”程序。比如

if (value)
{
a++;
}
else
{
a–;
}

if (value)
{
a++;
}
else
{
a–;
}
可能被优化为
if (value)
{
a+=2;
}
else
{
a-=2;
}

执行环境

终止执行”stdlib.h”

void abort(void);
用于不正常的终止一个正在执行的程序
void atexit(void(func )(void) );
可以把一些函数注册为退出函数。当程序将要正常终止时(exit,或者main返回),退出函数将被调用
void exit(int status);正常终止程序

include”stdio.h>

include”stdlib.h>

void func1()
{
printf(“The process is done…\n”);
}
void func2()
{
printf(“Clean up the processing\n”);
}
void func3()
{
printf(“Exit sucessful..\n”);
}
int main()
{
atexit(func1);
atexit(func2);
atexit(func3);
exit(0);
}
输出:
Exit sucessful..
Clean up the processing
The process is done…
Press any key to continue …

执行系统命令”stdlib.h”

void system(char const *command);把字符串参数传递给宿主操作系统,作为命令执行。

排序和查找”stdlib.h”

void qsort(void base,size_t n_elements,size_t el_size,int (*compare)(void const,void const*))快速排序;
数组,数目,长度,函数指针

char,整型:return (int )a - (int )b;小到大(b-a大到小)
double: return (double )a > (double )b ? 1 : -1;
一级结构体:return ((In )a).data > ((In )b).data ? 1 : -1;
字符串:return strcmp( ((In )a)->str , ((In )b)->str );

bsearch:在一个已经排好序的数组中用二分法查找一个特定的元素。返回一个指向查找到的数组元素的指针,不存在则返回NULL。

void bsearch(void const*key,void const *base,isze_tn_elements,size_t el_size,int (*compare)(void const ,void const *));
查找值的指针,数组,元素数目,长度,比较指针

int r_compare(void const*a, void const*b)
{
return (int )a - (int )b;
}
void main()
{
int a[10]={1,25, 3, 17,85,4, 5, 6, 78, 9};
qsort(a, 10, sizeof(a[0]),r_compare);
for (int i = 0; i <= 9; i++)
{
printf(“%d\n”,a[i]);
}
int i = 3;
int *p = &i;
int *p1;
p1=(int *)bsearch(p, a, 10, sizeof(a[0]),r_compare);
printf(“%d”,*p1);
}
输出:
1
3
4
5
6
9
17
25
78
85
3Press any key to continue …

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值