C标准头文件

时间:2023-12-17 10:46:44

是个大杂烩,里面声明了从动态内存分配到常用算法等各种函数和宏
#数据类型
**size_t**
**wchar_t**
**div_t**是一个结构体类型,也是div()返回的类型
**ldiv_t**是一个结构体类型,是ldiv()返回的类型

#宏
**NULL**
**EXIT_FAILURE**
**EXIT_SUCCESS**
**RAND_MAX**
**MB_CUR_MAX**
#函数
##文本转换
###atof()
```
/*
功能:将nptr指向的字符串的初始部分转换为double类型,等价于strtod(nptr, (char**)NULL)
参数:
返回值:
*/
double atof(const char* nptr);
```
###atoi()
```
/*
功能:把nptr指向的字符串的初始部分转换为int,等价于(int)strtol(nptr,(char**)NULL, 10)
参数:
返回值:
*/
int atoi(const char* nptr);
```
###atol()
```
/*
功能:把nptr指向的字符串的初始部分转换为long int,等价于strtol(nptr, (char**)NULL,10)
参数:
返回值:
*/
long int atol(const char* nptr)
```
###strtod()
```
/*
功能:把nptr指向的字符串的初始部分转换为double
参数:
返回值:
*/
double strtod(conts char* nptr, char** endptr);
```
###strtol()
```
/*
功能:把nptr指向的字符串的初始部分转换为long int
参数:
返回值:
*/
long int strtol(const char* nptr, char** endptr, int base);
```
###strtoul()
```
/*
功能:把nptr指向的字符串的初始部分转换为unsigned long int
参数:
返回值:
*/
unsigned long int strtoul(const char* nptr, char** enptr, int base);
```
##伪随机数
###srand()
```
/*
功能:产生一个伪随机数种子
参数:
返回值:
*/
void srand(unsigned int seed);
```
###rand()
```
/*
功能:计算一个伪随机数序列,范围在0~RAND_MAX
参数:
返回值:
*/
int rand(void);
```
##内存管理
###calloc()
```
/*
功能:为nmem个对象的数组分配空间,每个元素的大小为size,分配空间的所有位都被初始化为0
参数:
返回值:
*/
void* calloc(size_t nmemb, size_t size);
```
###free()
```
/*
功能:释放ptr指向的空间
参数:
返回值:
*/
void free(void* ptr);
```

###malloc()
```
/*
功能:为一个对象动态分配内存
参数:
返回值:
*/
void* malloc(size_t size);
```
###realloc()
```
/*
功能:将ptr指向的对象的大小改变为由size指定大小
参数:
返回值:
*/
void* realloc(void* ptr, size_t size);
```
##环境通信
###abort()
```
/*
功能:异常终止当前进程,除非捕获了SIGABRT且该信号的handler没有返回
参数:
返回值:
*/
void abort(void);
```
###atexit()
```
/*
功能:注册func指向的函数,该函数在程序正常终止的时候被调用,这个函数无参数
参数:
返回值:
*/
int atexit(void(*func)(void));
```
###exit()
```
/*
功能:正常终止当前进程
参数:
返回值:
*/
int exit(int status);
```
###getenv()
```
/*
功能:搜索宿主环境提供的环境表,从中查找一个和name串匹配的环境变量名
参数:
返回值:
*/
char* getenv(const char* name);
```
###system()
```
/*
功能:把string 指向的串传递给宿主环境,在宿主环境中适用命令处理程序执行这个命令
参数:
返回值:
*/
int system(const char* string);
```
##查找和排序
###bsearch()
```
/*
功能:搜索一个nmemb个对象的数组,来查找于key指向的对象匹配的元素,base指向这个数组的第一个元素,数组中每一个元素的大小由size指定
参数:
返回值:
*/
void* bsearch(const void* key, const void* base, size_t nmemb, size_t size, int (*compar)(const void*, const void*));
```
###qsort()
```
/*
功能:对一个包含nmemb个对象的数组进行排序
参数:
返回值:
*/
void qsort(void* base, size_t nmemb, size_t size, int(*compar)(const void*, const void*));
```
##整数算术
###abs()
```
/*
功能:计算整数的绝对值
参数:
返回值:
*/
int abs(int j);
```
###div()
```
/*
功能:计算分子除以坟墓所得的商和余数
参数:
返回值:返回一个div_t类型的结构,里面由成员`int quot//商`和`int rem//余数`
*/
div_t div(int numer, int denom);
```
###ldiv()
```
/*
功能:和div()类似,只是返回的基本数据类型都是long int
参数:
返回值:
*/
ldiv_t ldiv(long int numer, long int denom);
```

##多字节字符串函数
###mblen()
```
/*
功能:如果s不是void*, mblen()确定s指向的多姿接字符中包含的字节数,等价于mbtowc(wchar_t*)o,s,n);
参数:
返回值:
*/
int mblen(wchar_t* pwc, const char* s, size_t n);
```
###wctomb()
```
/*
功能:用来确定表示多字节字符所需要的字节数,这个多字节字符和值为wchar的编码相对应
参数:
返回值:
*/
int wctomb(char* s, wchar_t wchar);
```
##多字节串函数
###mbstowcs()
```
/*
功能:将s指向的数组中以初始的转移状态开始的多字节字符序列转换为相应的编码序列,并将最多n个编码存放到pwcs指向的数组中
参数:
返回值:
*/
size_t mbstowcs(wchar_t* pwcs, const char* s, size_t n);
```
###wcstombs()
```
/*
功能:将以pwcs指向的数组中的多字节字符对应的编码序列转换成以初始的转移状态开始的多字节字符序列,并将结果存放在s指向的字符数组中
参数:
返回值:
*/
size_t wcstombs(char* s, const wchar_t* pwcs, size_tn);
```
##环境表操作
###getenv()
```
char *getenv(const char *name);
```
进程的环境表中查找目标环境变量,返回环境变量值的指针
这个函数出错后不更该errno,所以不能用perror()来错误处理
```
//查找环境变量SHELL的值
extern char** environ; //环境表指针
char** ppc=environ; //ATTENTION:不要直接用environ会弄丢表头!
char buf[20]={0};
while(*ppc!=NULL){
if(!strncmp(*ppc,"SHELL",5)){
printf("%s\n",strcpy(buf,*ppc+6)); //ATTENTION:是*ppc+6,不是*ppc,这样才能跨过"SHELL="
break; //ATTENTION:要跳出循环,这个可不能忘!
}
ppc++;
}
printf("%s\n",getenv("SHELL"));
````
###setenv()
```
int setenv(const char *name, const char *value, int overwrite);
```
在进程的环境表中添加新的环境变量或更改现有变量的值,如果name不存在当前的环境变量表中,就添加一个名为name,值为value的环境变量,如果name已经存在,且overwrite为0,则不更该环境变量的值,如果overwrite不为0,就会用value的值覆盖现有值

函数出错会修改errno,可以使用perror()作错误处理
```
int res=setenv("SHELL","abcd",0);
if(-1==res)
perror("setenv"),exit(-1);
```
###unsetenv()
```
int unsetenv(const char *name);
```
从环境表中删除指定的环境变量,成功返回0,失败返回-1并设置errno
```
int res=unsetenv("MARK");
if(-1==res)
perror("unsetenv"),exit(-1);
```
###putenv()
```
b) int putenv(char *string);
```
添加或更改环境变量的值,如果不存在就添加,如果已经存在就用新值覆盖旧值,和setenv()不同的是,这里的string的格式是"PATH=..."形式,包括了变量名和变量的值
成功返回0,失败返回-1并设置errno
```
int res=putenv("XJ=QQ");
if(0!=res)
perror("putenv"),exit(-1);
```
###clearenv()
```
int clearenv(void);
```
清空环境表中所有变量的值,并且把environ设为NULL,一个进程一个环境表,同一个可执行文件运行两次的环境表都可能不一样,所以清空表并没有什么问题。同一成功返回0,失败返回-1
```
int res=clearenv(); //可以清空, 因为一个进程一个环境表
if(0!=clearenv){
perror("clearenv");
```