本文将介绍 C语言标准库<stdlib.h> 中的 宏、函数、数据类型
在最后给出一个实例程序,尽可能运用到所有函数


EXIT_SUCCESS 和 EXIT_FAILURE
exit函数成功退出和失败的返回值

#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
1
2
RAND_MAX rand 函数返回的最大的数
#define RAND_MAX 0x7FFF
1
MB_CUR_MAX 一个多字节字符的最大字节数
源码处理的比较复杂

函数
将字符串转换为 double
double atof (const char *);
1
将字符串转换为 int
int atoi (const char *);
1
将字符串转换为 long int
long atol (const char *);
1
将以数字开头的字符串转换为 double
str 是一个以数字开头的字符串,
返回把 str 转换后的 double , endptr 指向第一个不是数字的字符

double strtod(const char *str, char **endptr)
1
将以数字开头的字符串转换为 long int
str 是一个以数字开头的字符串,
返回把 str 以 base 为基数(进制)转换后的 long int ,
endptr 指向第一个不是数字的字符

long int strtol(const char *str, char **endptr, int base)
1
str 是一个以数字开头的字符串,
返回把 str 以 base 为基数 转换后的 unsigned long int ,
endptr 指向第一个不是数字的字符

unsigned long int strtoul(const char *str, char **endptr, int base)
1
分配请求的内存大小(nitems * size)并返回指向它的指针
void *calloc(size_t nitems, size_t size)
1
分配请求的内存(size)并返回指向它的指针
void *malloc(size_t size)
1
调整之前分配的内存块大小
ptr 执行要调整的内存块
size 要调整到的字节数
void *realloc(void *ptr, size_t size)
1
回收先前分配的内存
void free(void *ptr)
1
搜索环境变量并返回字符串
char *getenv(const char *name)
1
把命令(string)传递给主机由主机执行
int system(const char *string)
1
快速排序
base是数组的基地址
nitems是数组的元素个数
size是数组元素大小
compar是比较函数,靠返回值正负来比较,为0的情况未定义
void qsort(void *base, size_t nitems, size_t size,
int (*compar)(const void , const void))
1
2
二分查找
key是要查找的元素
base是数组的基地址
num是数组的元素个数
size数组元素大小
cmp是比较函数,靠返回值正负来比较,数组必须是排好序的
返回找到的元素的指针
void *bsearch(const void *key, const void *base, size_t num, size_t size,
int (*cmp)(const void *, const void *));
1
2
返回x的绝对值
int abs(int x)
long int labs(long int x)
1
2
做除法,分别得到除数和被除数
div_t div(int numer, int denom)
ldiv_t ldiv(long int numer, long int denom)
1
2
返回一个随机数,范围(0~RAND_MAX)
int rand(void)
1
对随机函数设置种子
void srand(unsigned int seed)
1
计算一个多字节字符的长度
n 是多字节字符的长度的最大值
int mblen(const char *str, size_t n)
1
多字节字符串转换为数组
将由参数str指向的多字节字符串转换为由pwcs指向的数组

n 是多字节字符的长度的最大值
size_t mbstowcs(schar_t *pwcs, const char *str, size_t n)
1
在程序正常退出时执行
func 要执行的函数
int atexit(void (*func)(void))
1
程序异常退出
void abort(void)
1
程序正常退出 ,返回给操作系统 status
void exit(int status)
1
数据类型
size_t是sizeof关键词的值,无符号整形
wchar_t 宽字符类型
div_t与ldiv_t结构体 作为 div 的返回值
typedef struct {
int quot; // 商
int rem; // 余数
} div_t;
//-------------------------------
typedef struct {
long int quot; // 商
long int rem; // 余数
} ldiv_t;
1
2
3
4
5
6
7
8
9
示例文件
Github

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void test(){ printf(“do this at exit\n”); }
int cmptest(const void * a, const void * b){
return (int)( (char)a - (char)b );
}
int main (){
///
/// ## 数据类型
///

/// ### size_t是sizeof关键词的值,无符号整形
printf(“size_t %d\n”,sizeof(size_t));

/// ### wchar_t 宽字符类型
printf(“wchar_t %d\n”,sizeof(wchar_t));

/// ### div_t与ldiv_t结构体 作为 div 的返回值
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// typedef struct {
/// int quot; // 商
/// int rem; // 余数
/// } div_t;

div_t div_t_timp;
printf("div_t %d  div_t.quot %d div_t.rem %d\n",
sizeof(div_t),sizeof(div_t_timp.quot),sizeof(div_t_timp.rem));

/// //-------------------------------
/// typedef struct {
/// long int quot; // 商
/// long int rem; // 余数
/// } ldiv_t;
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ldiv_t ldiv_t_timp;
printf(“ldiv_t %d ldiv_t.quot %d ldiv_t.rem %d\n”,
sizeof(ldiv_t),sizeof(ldiv_t_timp.quot),sizeof(ldiv_t_timp.rem));

///
/// ## 宏
///

/// ### EXIT_SUCCESS 和 EXIT_FAILURE
/// exit函数成功退出和失败的返回值
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// #define EXIT_SUCCESS 0
/// #define EXIT_FAILURE 1
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf(“EXIT_SUCCESS %d\nEXIT_FAILURE %d\n”,EXIT_SUCCESS,EXIT_FAILURE);

/// ### RAND_MAX rand 函数返回的最大的数
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// #define RAND_MAX 0x7FFF
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf(“RAND_MAX %d\n”,RAND_MAX);

/// ### MB_CUR_MAX 一个多字节字符的最大字节数
/// 头文件中的处理比较复杂
printf(“MB_CUR_MAX %d\n”,MB_CUR_MAX);

///
/// ## 函数
///

/// ### 将字符串转换为 double
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// double atof (const char *);
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf(“atof(“12.3”) %f\n”,atof(“12.3”));

/// ### 将字符串转换为 int
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// int atoi (const char *);
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf(“atoi(“12”) %d\n”,atoi(“12”));

/// ### 将字符串转换为 long int
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// long atol (const char *);
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf(“atol(“123456789”) %ld\n”,atol(“123456789”));

/// ### 将以数字开头的字符串转换为 double
/// str 是一个以数字开头的字符串,
/// 返回把 str 转换后的 double , endptr 指向第一个不是数字的字符
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// double strtod(const char *str, char **endptr)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
char *p;
printf(“strtod(“12.030 hello”,&p) %f”,strtod(“12.030hello”,&p));
printf(" %s\n",p);

/// ### 将以数字开头的字符串转换为 long int
/// str 是一个以数字开头的字符串,
/// 返回把 str 以 base 为基数(进制)转换后的 long int ,
/// endptr 指向第一个不是数字的字符
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// long int strtol(const char *str, char **endptr, int base)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf(“strtol(“ffhello”,&p,16) %ld”,strtol(“ffhello”,&p,16));
printf(" %s\n",p);

/// ### str 是一个以数字开头的字符串,
/// 返回把 str 以 base 为基数 转换后的 unsigned long int ,
/// endptr 指向第一个不是数字的字符
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// unsigned long int strtoul(const char *str, char **endptr, int base)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf(“strtoul(“ffhello”,&p,16) %uld”,strtoul(“ffhello”,&p,16));
printf(" %s\n",p);

/// ### 分配请求的内存大小(nitems * size)并返回指向它的指针
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// void *calloc(size_t nitems, size_t size)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p = (char *)calloc(5, sizeof(char));
printf(“calloc(5, sizeof(char)) %p\n”,p);

/// ### 分配请求的内存(size)并返回指向它的指针
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// void *malloc(size_t size)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* p = (char *)calloc(5 * sizeof(char)); */

/// ### 调整之前分配的内存块大小
/// * ptr 执行要调整的内存块
/// * size 要调整到的字节数
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// void *realloc(void *ptr, size_t size)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p = realloc(p,10sizeof(char));
printf("realloc(p,10
sizeof(char)) %p\n",p);
p = realloc(p,10000sizeof(char));
printf("realloc(p,10000
sizeof(char)) %p\n",p);

/// ### 回收先前分配的内存
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// void free(void *ptr)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
free§;

/// ### 搜索环境变量并返回字符串
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// char *getenv(const char *name)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf(“getenv(“PATH”) %.30s …\n”, getenv(“PATH”));

/// ### 把命令(string)传递给主机由主机执行
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// int system(const char *string)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf(“system(“echo ok”)\n”);
system(“echo ok”);

/// ### 快速排序
/// * base是数组的基地址
/// * nitems是数组的元素个数
/// * size是数组元素大小
/// * compar是比较函数,靠返回值正负来比较,为0的情况未定义
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// void qsort(void *base, size_t nitems, size_t size,
/// int (*compar)(const void , const void))
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p = (char *)calloc(11, sizeof(char));
strcpy(p,“5147096382”);
qsort(p,10,sizeof(char),cmptest);
printf("qsort ");
printf§;
putchar(’\n’);

/// ### 二分查找
/// * key是要查找的元素
/// * base是数组的基地址
/// * num是数组的元素个数
/// * size数组元素大小
/// * cmp是比较函数,靠返回值正负来比较,数组必须是排好序的
/// * 返回找到的元素的指针
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// void *bsearch(const void *key, const void *base, size_t num, size_t size,
/// int (*cmp)(const void *, const void *));
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
char a = ‘3’; /* 搜索a */
printf("bsearch ");
printf((char *)bsearch(&a,p,10,sizeof(char),cmptest));
free§;
putchar(’\n’);

/// ### 返回x的绝对值
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// int abs(int x)
/// long int labs(long int x)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf(“abs(-5) %d\n”,abs(-5));

/// ### 做除法,分别得到除数和被除数
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// div_t div(int numer, int denom)
/// ldiv_t ldiv(long int numer, long int denom)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
div_t div_out = div(7,2);
printf(“div(7,2)={%d,%d}\n”,div_out.quot,div_out.rem);

/// ### 返回一个随机数,范围(0~RAND_MAX)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// int rand(void)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf(“rand() = %d\n”,rand());

/// ### 对随机函数设置种子
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// void srand(unsigned int seed)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
srand(15);

/// ### 计算一个多字节字符的长度
/// * n 是多字节字符的长度的最大值
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// int mblen(const char *str, size_t n)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wchar_t mywchar = L’汉’; /***** todo: 换成’国’就不行了 */
printf(“mblen(’%x’,MB_CUR_MAX) %u\n”,L’汉’,mblen((char *)&mywchar,MB_CUR_MAX));

/// ### 多字节字符串转换为数组
/// 将由参数str指向的多字节字符串转换为由pwcs指向的数组
/// * n 是多字节字符的长度的最大值
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// size_t mbstowcs(schar_t *pwcs, const char *str, size_t n)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/***** todo: 添加实例 */

/* todu 宽字符处理看不懂
int mbtowc(whcar_t *pwc, const char *str, size_t n)
Examines the multibyte character pointed to by the argument str.

size_t wcstombs(char *str, const wchar_t *pwcs, size_t n)
Converts the codes stored in the array pwcs to multibyte characters and stores them in the string str.int wctomb(char *str, wchar_t wchar)
Examines the code which corresponds to a multibyte character given by the argument wchar.*/

/// ### 在程序正常退出时执行
/// * func 要执行的函数
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// int atexit(void (*func)(void))
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
atexit(test);

/// ### 程序异常退出
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// void abort(void)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* abort(); */

/// ### 程序正常退出 ,返回给操作系统 status
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c
/// void exit(int status)
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
exit(0);

C语言标准库stdlib.h相关推荐

  1. C 标准库—— stdlib.h(包括 rand srand 的实现)

    C 标准库-- string.h C 标准库 -- time.h C 标准库 -- limits.h C 标准库 -- stdio.h C 标准库-- stdlib.h(包括 rand srand 的 ...

  2. 1.C标准库——stdlib.h

    atof atoi exit 简介 stdlib .h 头文件定义了四个变量类型.一些宏和各种通用工具函数. 库变量 下面是头文件 stdlib.h 中定义的变量类型: 序号 变量 & 描述 ...

  3. C语言 通用工具库 stdlib.h

    ANSI C在stdlib.h头文件中定义了一些实用函数. stdlib.h中声明的类型 size_t sizeof运算符返回的整数类型 wchar_t 用于表示宽字符的整数类型 div_t div( ...

  4. C标准库stdlib.h概况

    库变量 size_t  这是无符号整数类型,它是 sizeof 关键字的结果 wchar_t  这是一个宽字符常量大小的整数类型. div_t  这是 div 函数返回的结构 ldiv_t  这是 l ...

  5. c语言stdlib函数库,C语言函数库——stdlib.h

    1.abs 功能:求绝对值 2.atof 功 能: 把字符串转换成浮点数 例子: #include #include int main() { float f; char *str = "1 ...

  6. C语言标准库 <float.h>

    C语言标准库 <float.h> 简介 <float.h>头文件包含了一组与浮点值相关的依赖于平台的宏定义.这些常量让程序更具有可移植性.现在先弄清楚浮点数是由下面四个元素组成 ...

  7. C语言标准库<limits.h>

    C语言标准库<limits.h> 简介 <limits.h>头文件决定了整型和字符型变量的各种属性,定义在该头文件中的宏限制了各种变量类型的值.这些限制指定了变量不能存储任何超 ...

  8. C语言标准库<string.h>

    C语言标准库<string.h> 简介 <string.h>头文件定义了一个变量类型和一个宏和各种操作字符数组的函数. 变量类型 下面是这个库中定义的唯一的一个变量类型: 变量 ...

  9. C语言标准库<math.h>

    C语言标准库<math.h> 简介 <math.h>头文件定义了各种数学函数和一个宏,在这个库中所有可用的功能都带有一个double类型的参数,且都返回double类型的结果. ...

最新文章

  1. 问题类像程序员一样思考
  2. 6个精心整理的资源网站,送给正在努力的你
  3. Android控件Gallery3D效果 .
  4. Android 功耗优化(4)---android 7.0低电耗Doze模式
  5. opencv 编译安装时出现报错 modules/videoio/src/cap_ffmpeg_impl.hpp:585:34: error: ‘AVStream {aka struct AVStre
  6. iis 附件上传有点慢_短视频悄悄上线!“一起培训”的这个新功能有点潮
  7. 2010年安全主题展望
  8. rsync+inotify实现数据实时同步
  9. 疫情下的思考:全球疫情带来的危机与机遇
  10. 抓包与发流软件与网络诊断
  11. 增值税发票税控开票软件V2.0.48_ZS_20220429(220518)-3
  12. Windows XP/2000/Vista/7/8/8.1/10系统 hosts文件位置及使用
  13. (什么是 RPC?) AND(什么是域名?)AND (DMA是什么?)AND(IRQ是什么?) 选择自 ycool1984 的 Blog
  14. configure: error: Package requirements (oniguruma) were not met
  15. 异常:Mapper method 'com.***.delByNumber' has an unsupported return type: class java.lang.String
  16. c语言编写的点菜程序,基于C语言实现点菜系统
  17. 关于android的sqlite问题,阳光沙滩-android studio的sqlite使用出现问题,是什么情况呢?...
  18. VIN车架号查询api服务
  19. 噪声概念: 信噪比(SNR)、噪声谱密度(NSD)、白噪声(n)、粉红噪声(1/f)
  20. Dancer--introduction小议❶

热门文章

  1. 你为什么要学习WordPress?
  2. ubuntu下安装及配置git的方法(最全超详细教程github)
  3. 语言在线组卷系统_如何使用在线考试系统创建题库?
  4. java 阻塞 直到完成_完成所有提交的任务后关闭Java执行程序而不会阻塞
  5. 孙长凯sunck_傅里叶变换红外光谱分析NMDA受体单克隆抗体抗-中国科技论文在线.PDF...
  6. python编译环境 eclipse_eclipse搭建python编译环境
  7. 计算机图书管理属于计算机应用中的,计算机在图书管理中应用探究.doc
  8. 计算机表演赛vr创意大赛,计算机表演赛新增VR创意大赛
  9. python怎么写出正弦图_如何使用python在图像上生成随机正弦条纹?
  10. python写前端和js_Python【13】【前端编程】- JS基础