C语言stdlib使用实例
所属分类 c
浏览量 811
7类不同的实用工具函数
字符串转换函数
伪随机序列生成函数
内存管理函数
与外部环境通信的函数
搜索和排序函数
整数算术运算函数
多字节字符和字符串函数
字符串转换函数
double atof(const char *nptr);
int atoi(const char *nptr);
long int atol(const char *nptr);
double strtod(const char *nptr, char **endptr);
long int strtol(const char *nptr, char **endptr, int base);
unsigned long int strtoul(const char *nptr, char **endptr, int base);
前三个函数旧函数
跳过开头空格,碰到第一个非数字字符停止解析,转换成 数字
后3个新函数
base指定基数
值溢出时 将ERANGE放在 errno.h errno变量中
double strtod(const char *str, char **endptr)
把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)
如果 endptr 不为空,则指向转换中最后一个字符后的字符的指针 存储在 endptr 引用的位置
C语言字符串转浮点数
伪随机数序列生成函数
int rand(void);
void srand(unsigned int seed);
C语言 rand srand rand_r
内存管理函数
内存分配 释放
void *malloc(size_t size);
void *calloc(size_t n, size_t size);
void *realloc(void *ptr, size_t size);
void free(void *ptr);
malloc 分配内存但不初始化
calloc 分配内存并清零
realloc 调整已分配内存块的大小
free 释放内存
C语言动态内存分配与释放
与外部环境通信函数
正常或不正常终止,返回一个状态码
从用户的外部环境获取信息
执行操作系统命令
void exit(int n);
void abort(void n);
int atexit(void (*func)(void));
char *getenv(const char *name);
int system(const char *command);
exit atexit 及 abort
搜索和排序函数
void qsort(void *base, size_t num, size_t size, int (*compar)(const void*, const void*));
void *bsearch(const void *key, const void *base, size_t num, size_t size, int (*compar)(const void*, const void*));
qsort 对数组进行排序
base 数组,num为数组中元素数量,size为每个数组元素大小,compar为指向比较函数的指针
bsearch 二分查找有序数组
key 关键字
base 数组
num 数组中元素个数
size 每个数组元素的大小
compare 比较函数的指针
C语言排序和搜索
整数算术运算函数
int abs(int j);
div_t div(int number, int denom);
long int labs(long int j);
ldivt ldiv(long int num, long int denom)
abs 返回int绝对值
labs 返回long绝对值
div int除法
div_t 结构 quot ,rem 余数
ldiv long除法
int x = -99;
printf("%d abs %d\n", x, abs(x));
long y = -1000L;
printf("%ld (long) abs %ld\n", y, labs(y));
int x1 = 99;
int x2 = 7;
div_t dit = div(x1, x2);
printf("%d / %d = %d remainder %d\n", x1, x2, dit.quot, dit.rem);
long y1 = 999L;
long y2 = 20L;
ldiv_t ldit = ldiv(y1, y2);
printf("%ld / %ld = %ld remainder %ld\n", y1, y2, ldit.quot, ldit.rem);
多字节和字符串处理函数
宽字符和多字节字符
int mblen(const char *s, size_t n);
int mbtowc(wchar_t *pwc, const char *s, size_t n);
int wctomb(char *s, wchar_t wchar);
size_t mbstowcs(wchar_t *pwcs, const char *s, size_t n);
size_t wcstombs(char *s, const wchar_t *s, size_t n);
mblen 检测字节数组是否是一个有效的多字节字符序列
mbtowc 多字节字符转换为单字符
wctomb 宽字符转换为多字节字符
mbstowcs 多字节字符转换为宽字符
wcstombs 宽字符串转换为多字节字符串
wctomb = wide character to multibyte
setlocale(LC_ALL, "");
wchar_t zhong = L'中';
char mb[MB_CUR_MAX];
int num = wctomb(mb, zhong);
wprintf(L"mb的字节数为%d\n", num);
if (mblen(mb, MB_CUR_MAX)){
wprintf(L"mb是一个有效的多字符序列!\n");
}
wchar_t china[] = L"中国";
char *mb2 = malloc(MB_CUR_MAX * sizeof(china)/sizeof(wchar_t));
size_t num2 = wcstombs(mb2, china, MB_CUR_MAX * sizeof(china)/sizeof(wchar_t));
wprintf(L"mb2的字节数为%d\n", num2);
wchar_t love[3] = L"";
mbstowcs(love, mb2, 2);
wprintf(L"我爱%Ls\n", love);
完整代码
https://gitee.com/dyyx/hellocode/tree/master/web/tech/c/demo/stdlib
上一篇
下一篇
C语言 rand srand rand_r
C语言动态内存分配与释放
exit atexit 及 abort
程序各个段text data bss stack heap
C++左值和右值
springboot jar包无法解压