computer_knowledge_notes/Languages/CLang/libraries/stdlib.md

90 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#### 概述
实用函数
#### 数组排序与字符串转换
```c
/* 宏定义 */
// 当前local里多字节字符的最大长度
#define MB_CUR_MAX (__ctype_get_mb_cur_max ())
/* 给数组排序
* base数组的指针
* nmemb数组元素数量
* size数组的大小
* compar元素比较函数它是数组排序的依据
*/
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
void qsort_r(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *, void *), void *arg);
/* 把ASCII字符串转换为浮点数 */
double strtod(const char *nptr, char **endptr);
float strtof(const char *nptr, char **endptr);
long double strtold(const char *nptr, char **endptr);
/*
* 把<*nptr>指向的字符串转化为一个长整型的值。
* 参数:base字符串所代表的整型数的基数。
* 参数endptr当函数返回时若<*nptr>指向的字符串可以完全被翻译成一个数字则此值被设置成NULL;当<*nptr>指向的字符串不能完全被翻译成一个数字,则此值会被设置成指向字符串里不能被翻译的部分;当<*nptr>指向的字符串完全不能被翻译成一个数字,此值会指向整个字符串。
*/
long strtol (const char *__restrict, char **__restrict, int);
unsigned long strtoul (const char *__restrict, char **__restrict, int);
long long strtoll (const char *__restrict, char **__restrict, int);
unsigned long long strtoull (const char *__restrict, char **__restrict, int);
/* 字符串转换到 int 整型 */
int atoi(const char *nptr);
/* 字符串转换到 long 整型 */
long atol(const char *nptr);
/* 字符串转换到 double 符点数 */
double atof(const char *nptr);
long long atoll(const char *nptr);
```
#### 环境变量
```c
/* 清除环境 */
int clearenv(void);
/* 改变或添加环境变量 */
int putenv(char *string);
/* 获取环境变量的值
* 返回值环境变量name所对应的值的指针。如没有匹配的则返回NULL。
*/
char *getenv(const char *name);
char *secure_getenv(const char *name);
/* 改变或添加环境变量 */
int setenv(const char *name, const char *value, int overwrite);
/* 删除环境变量 */
int unsetenv(const char *name);
```
#### 随机数
```c
/* 生成一个伪随机数 */
long int random(void);
/* 为random()函数设置seed因为random()产生的伪随机数取决于seed */
void srandom(unsigned int seed);
/* 初始化状态数组state给random()函数用 */
char *initstate(unsigned int seed, char *state, size_t n);
/* 改变random()函数所使用的状态数组state */
char *setstate(char *state);
```
#### 分配内存
```c
void *malloc(size_t size); // 分配大小为size字节的内存返回其指针。注分配到的内存未初始化。
void free(void *ptr); // 释放ptr指向的内存。注prt必须是malloc()calloc()或realloc()的返回值。
void *calloc(size_t nmemb, size_t size); // 为数组分配内存nmemb是数组中元素数size是每个元素的大小。注分配到的内存会初始化为0.
void *realloc(void *ptr, size_t size);
void *reallocarray(void *ptr, size_t nmemb, size_t size);
```