c语言工具函数

转载 2012年03月28日 14:57:35
  1. abort
  2. abs
  3. assert
  4. atexit
  5. atof
  6. atoi
  7. atol
  8. atoll
  9. bsearch
  10. div
  11. exit
  12. _Exit
  13. getenv
  14. labs
  15. llabs
  16. ldiv
  17. lldiv
  18. longjmp
  19. qsort
  20. raise
  21. rand
  22. setjmp
  23. signal
  24. srand
  25. strtod
  26. strtof
  27. strtol
  28. strtold
  29. strtoll
  30. strtoul
  31. strtoull
  32. system
  33. va_arg、var_copy、va_start及va_end



该节的函数大都使用头文件<stdlib.h>。定义的类型div_t和ldiv_t分别是函数div()和ldiv()的返回值类型。

1.abort

#include <stdlib.h>
void abort(voi );

使程序立即非正常终止,一般不对缓冲区清仓。

2.abs

#include <stdlib.h>
int abs(int num);

返回整数变元num的绝对值。

3.assert

#include <assert.h>
void assert(int exp);

当表达式exp求值为0时,宏先向标准错误流stderr写错误信息,然后使程序非正常终止,否则,该宏无任何作用。

当宏NDEBUG定义时,该宏的定义为空。

4.atexit

#include <stdlib.h>
int atexit(void (*func)(void));

使得程序终止时调用由func指针指向的函数。如果成功注册,则函数返回0值,否则返回非0值。

最少应允许注册32个终止函数,被注册的函数以注册的反序调用。

5.atof

#include <stdlib.h>
double atof(const char *str);

把str指向的串转换为双精度浮点值,串中必须含合法的浮点数,否则返回值不确定。

串中的数可以由有效浮点数中的任何字符结束,如空白符、除句号外的标点符号和E或e之外的字符等。

6.atoi

#include <stdlib.h>
int atoi(const char *str);

把str指向的串转换为整数(int)值。串中必须含合法整型数,否则返回值无定义。

串中的整数内容可由任何不是该整数的一部分的字符终止,如空白符、标点符号和字符等。

7.atol

#include <stdlib.h>
long atol(const char *str);

把str指向的串转换为长整数(long int)值。串中必须含合法整型数,否则返回值无定义。

串中的整数内容可由任何不是该整数的一部分的字符终止,如空白符、标点符号和字符等。

8.atoll

#include <stdlib.h>
long long atoll(const char *str);

该函数是C99增加的。把str指向的串转换为长长整数(long long int)型值。其他方面类似于atol()。

9.bsearch

#include <stdlib.h>
void *bsearch(const void *key, const void *buf, size_t num,
size_t size, int (*compare)(const void *, const void *));

函数对buf指向的已排序数组实施对分查找(binary search),返回与key指向的关键字匹配的第一个成员的指针。num说明数组中的元素数目,size指出每个元素占有的字节数。

函数指针compare指向的函数把关键字key和数组元素比较,比较函数的形式为:

int func_name(const void *arg1, const void *arg2);

arg1是key指针,arg2是数组元素指针。

返回值必须如下:

  • arg1 < arg2时,返回值<0;
  • arg1 == arg2时,返回值=0;
  • arg1 > arg2时,返回值>0。

数组必须已经按升序排序,最低地址处放最低元素。

如果数组中不含关键字,则函数返回空指针。

10.div

#include <stdlib.h>
div_t div(int numerator, int denominator);

函数返回numerator/denominator操作的商和余数,返回值的结构类型是div_t,该结构有以下两个域:

int quot; /* 商 */

int rem; /* 余数 */

11.exit

#include <stdlib.h>
void exit(int exit_code);

该函数使程序立即正常终止,这意味着调用由atexit()注册的终止函数,并且清空和关闭任何打开的文件。

环境支持时,exit_code值传给调用进程。

12._Exit

#include <stdlib.h>
void _Exit(int exit_code);

该函数由C99增加。该函数类似于exit(),但有下列差别:

  • 没有调用atexit()注册的函数;
  • 没有调用signal()注册的信号处理程序;
  • 打开的文件不必清空或关闭。

13.getenv

#include <stdlib.h>
char *getenv(const char *name);

函数返回一个指针,指向实现定义的环境信息表中与name指向的串有关的环境信息。千万不要用代码修改该串。

没有查到匹配数据时,返回空指针。

14.labs

#include <stdlib.h>
long labs(long int num);

返回num的绝对值。

15.llabs

#include <stdlib.h>
long long int llabs(long long int num);

由C99增加,返回num的绝对值。

16.ldiv

#include <stdlib.h>
ldiv_t div(long int numerator, long int denominator);

函数返回numerator/denominator操作的商和余数,返回值的结构类型是ldiv_t,该结构有以下两个域:

long int quot; /* 商 */

long int rem; /* 余数 */

17.lldiv

#include <stdlib.h>
lldiv_t div(long long int numerator, long long int denominator);

由C99增加,函数返回numerator/denominator操作的商和余数,返回值的结构类型是lldiv_t,该结构有以下两个域:

long long int quot; /* 商 */

long long int rem; /* 余数 */

18.longjmp

#include <setjmp.h>
void longjmp(jmp_buf envbuf, int status);

使程序在最近一次调用setjmp()处重新执行。status变成setjmp()的返回值。

19.qsort

#include <stdlib.h>
void qsort(void *buf, size_t num, size_t size, \
 int (*compare)(const void *, const void *));

使用Quicksort算法对buf指向的数组进行排序,num是数组中元素的数目,size说明每个元素的大小(按字节)。

比较函数compare的形式如下:

int func_name(const void *arg1, const voie *arg2);

其返回值必须如下所示:

  • arg1 < arg2, <0
  • arg1 == arg2, ==0
  • arg1 > arg2, >0

数组按升序排列,最低地址处放最小元素。

20.raise

#include <signal.h>
int raise(int signal);

把signal指定的信息传入执行中的程序。成功时返回0,否则返回非0值。下面信号是由ANSI C标准定义的:

SIGABRT     终止错误
SIGFPE      浮点错误
SIGILL      非法指令
SIGINT      用户按CTRL+C键
SIGSEGV     非法的内存访问
SIGTERM     终止程序

21.rand

#include <stdlib.h>
int rand(void);

产生伪随机数序列,每次它被调用时返回一个0到RAND_MAX间的整数。RAND_MAX值至少是32767。

22.setjmp

#include <setjmp.h>
int setjmp(jmp_buf envbuf);

在缓冲区envbuf中保存系统堆栈的内容,供longjmp()以后使用。

23.signal

#include <signal.h>
void (*signal(int signal, void (* func)(int)))(int);

注册由func指向的函数,作为signal所说明的信号的一个处理程序。

24.srand

#include <stdlib.h>
void srand(unsigned int seed);

为rand()生成的伪随机数序列设置起点。

25.strtod

#include <stdlib.h>
double strtod(const char *start, char **end);

函数把start指向的字符串中存储的数字串表达式转换成双精度浮点值(double),然后返回转换结果。

过程如下:首先滤掉start前导空白符,然后逐个读入构成数的字符,任何非浮点数成分的字符都会终止上述过程,这类字符包括空白、标点(英文句号除外)和非E非e的字母等。最后,若原始串未用完,则end置为指向剩余串的开始字符。

溢出产生时,函数返回HUGE_VAL(代表上溢)或-HUGE_VAL(代表下溢),并且全局变量errno置为ERANGE。如果start未指向一个数值,则不发生转换并返回0。

如果范围有错,则返回0,errno也置为ERANGE。

26.strtof

#include <stdlib.h>
float strtof(const char *start, char **end);

该函数由C99增加。与strtod()类似,只是它返回float类型值。

27.strtol

#include <stdlib.h>
long int strtol(const char *start, char **end, int radix);

把start指向的串中的数字串表达式转换为长整数,然后返回转换结果。数字串的基(进制)有radix决定。如radix为0,进制由说明常数的规则决定;如radix为非0,它必须是2到36间的一个值。

end的使用类似于strtod()的讨论。

如果结果不能用长整数表示,则返回LONG_MAX或LONG_MIN,并且errno设为ERANGE。如果start不指向一个数,则不产生转换,返回0。

28.strtold

#include <stdlib.h>
long double strtold(const char *start, char **end);

该函数由C99增加。处理类似于strtod(),只是它返回long double型值。

29.strtoll

#include <stdlib.h>
long long int strtoll(const char *start, char **end, int radix);

该函数由C99增加。处理类似于strtol(),只是它返回long long int型值。

30.strtoul

#include <stdlib.h>
unsigned long int strtoul(const char *start, char **end,
int radix);

把start指向的串中的数字表达式转换为无符号长整数。执行过程类似于strtol()。

如果结果不能按无符号长整数表示,则返回ULONG_MAX或ULONG_MIN,且全局变量errno置为ERANGE。

31.strtoull

#include <stdlib.h>
unsigned long long int strtoull(const char *start, char **end,
int radix);

该函数由C99增加。处理类似于strtoul(),只是它返回unsigned long long int型值。

32.system

#include <stdlib.h>
int system(const char *str);

把str指向的串作为命令传入操作系统的命令处理程序。该函数与具体环境有关。

33.va_arg、var_copy、va_start及va_end

#include <stdarg.h>
type va_arg(va_list argptr, type);
void va_copy(va_list target, va_list source);
void va_end(va_list argptr);
void va_start(va_list argptr, last_parm);

其中va_copy由C99增加。

宏va_arg()、var_start()和va_end()一起作用,完成向函数传入数目可变的变元操作。

创建一个能获取可变数目变元的函数的通用过程如下:在函数定义中,可变参数表之前它必须有一个或多个已知参数,其中最右者为last_parm,在 调用va_start()时,last_parm被用作第二个参数。使用任何可变长的变元之前,必须先用va_start()初始化变元指针 argptr,之后,经过对va_arg()的调用,以作为下一个参数类型的参数类型,返回参数。最后取完所有参数并从函数返回之后,必须调用 va_end(),确保堆栈的正确恢复。如未正确调用va_end(),程序很可能瘫痪。

例子:函数sum_series()的第一个参数是变元项数。

double sum_series(int num, … )
{
    double sum = 0.0, t;
    va_list argptr;

    va_start(argptr, num);
    for (; num; num--) {
        t = va_arg(argptr, double);
        sum += t;
    }
    va_end(argptr);
    return sum;
}

C语言的实用工具库

C语言在中声明了7类不同的实用工具函数,包括字符串转换函数、伪随机序列生成函数、内存管理函数、与外部环境通信的函数、搜索和排序函数、整数算术运算函数以及多字节字符和字符串函数。...
  • lemonrabbit1987
  • lemonrabbit1987
  • 2015年09月02日 06:52
  • 486

C语言函数调用性能测试

原文链接:  http://www.cnblogs.com/woshare/p/4720771.html 在i5 3.1GHz下: 1024字节栈,需要约300纳秒; 64字节栈,需要2...
  • littlefang
  • littlefang
  • 2015年08月13日 15:12
  • 1587

静态分析C语言生成函数调用关系的利器——calltree

当项目中引入了一些第三方或者开源库时,如果没有详细的文档说明,我们往往有种“盲人摸象”的感觉。如果只是简单的使用还好,但是这些代码需要被定制时,就需要深入阅读理解其实现。这个时候又往往有种“无从入手”...
  • breaksoftware
  • breaksoftware
  • 2017年07月20日 22:39
  • 1105

c语言学习-工具使用 (转)

c语言学习:使用开发工具      这是俺们语言教程的第一课。这一课我将使用高科技,多媒体教学——图片示例。        开发c语言程序,需要什么工具呢?最重要的工具是编译器,还有代码编写器,它会提...
  • fengyaya
  • fengyaya
  • 2006年08月14日 00:10
  • 1394

常用的C语言编程工具

中国有句古话叫做“工欲善其事,必先利其器”,可见我们对工具的利用是从祖辈就传下来的,而且也告诉我们在开始做事之前先要把工具准备好。有了好的工具那么我们做起事来也会事半功倍。学习C语言也是一样的,对于初...
  • Cowena
  • Cowena
  • 2015年09月01日 13:26
  • 6548

使用f2py将C语言的函数转换为python模块

f2py本来是用来转换fortran代码的,其实也可以转换c语言的代码,只是要自己写一个签名文件吧了! 以前都是用swig做的,现在发现用f2py其实更简单一点,但是对不懂fortran的人,还是使用...
  • rumswell
  • rumswell
  • 2012年03月21日 12:18
  • 3245

C语言开发人员很实用的工具

一个可自从产生打印代码,赋值代码的工具,一个可以解析码流的工具。
  • Empkin
  • Empkin
  • 2016年02月16日 12:09
  • 1147

C语言的四种拷贝函数

头文件:#include 一、strcpy函数    strcpy() 函数用来复制字符串,其原型为:        char *strcpy(char *dest, const char *src...
  • xingerr
  • xingerr
  • 2017年04月18日 12:29
  • 818

C语言宏替换的几种用法 【转载】

出处: http://topic.csdn.net/t/20030820/15/2168502.html①简单宏替换             #defind   Pi   3.14159     或 ...
  • gaoce227
  • gaoce227
  • 2017年05月27日 22:16
  • 276

慢慢总结C语言一些常用函数

fgets 头文件:#include 函数原型:char *fgets(char *s, int size, FILE *stream); 返回值:成功时s指向哪返回的指针就指向哪,出错或者读到文件...
  • hbk320
  • hbk320
  • 2015年10月25日 09:54
  • 1442
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c语言工具函数
举报原因:
原因补充:

(最多只允许输入30个字)