stdlib.h
库变量
变量 |
说明 |
size_t |
无符号整数类型,它是 sizeof 关键字的结果。 |
wchar_t |
是一个宽字符常量大小的整数类型。 |
div_t |
是 div 函数返回的结构。 |
ldiv_t |
是 ldiv 函数返回的结构。 |
库宏
宏 |
说明 |
NULL |
是一个空指针常量的值。 |
EXIT_FAILURE |
exit 函数失败时要返回的值。 |
EXIT_SUCCESS |
exit 函数成功时要返回的值。 |
RAND_MAX |
rand 函数返回的最大值。 |
MB_CUR_MAX |
表示在多字节字符集中的最大字符数,不能大于 MB_LEN_MAX。 |
算术运算
函数 |
说明 |
int abs(int x) |
求绝对值。 |
long int labs(long int x) |
求绝对值。 |
div_t div(int numer, int denom) |
分子除以分母,返回商和余数。 |
ldiv_t ldiv(long int numer, long int denom) |
分子除以分母,返回商和余数。 |
随机数
函数 |
说明 |
int rand(void) |
返回一个范围在 0 到 RAND_MAX 之间的伪随机数。 |
void srand(unsigned int seed) |
使用参数值对随机数发生器进行初始化。 |
注意:
- 常用当前的时间作为随机数产生器的种子:
srand((unsigned int)time(0))
。
字符串转换
函数 |
说明 |
int atoi(const char *str) |
把参数 str 所指向的字符串转换为int |
long int atol(const char *str) |
把参数 str 所指向的字符串转换为long int |
long int strtol(const char *str, char **endptr, int base) |
把参数 str 所指向的字符串转换为long int |
unsigned long int strtoul(const char *str, char **endptr, int base) |
把参数 str 所指向的字符串转换为unsigned long |
注意:
-
atoi
,atol
执行基数为10的转换;strtol
、strtoul
,允许指定转换的基数,并且允许访问转换后字符串剩余的字节。
-
上面的函数都将跳过字符串中包含的前导空白字符,然后函数把合法的字符转换成指定类型的值,如果存在任何的非法后缀,也将被忽略。
-
strtol
、strtoul
函数的第二个参数不是NULL
,这个指针就保存在第二个参数所指向的位置,这个指针允许字符串剩余部分进行处理而无需推测转换在字符串什么位置结束。
-
转换基数的范围是2-36
,字母A-Z
将被解释为数字10-35
。
char* unused = NULL;
cout << strtol("123abc",&unused,10)<<endl; //123
cout << unused << endl; //abc
cout << strtol("123abc", &unused, 16) << endl; //1194684
cout << unused << endl; //空
动态内存分配
函数 |
说明 |
void *calloc(size_t nitems, size_t size) |
根据元素数目以及每个元素占用的内存大小分配内存,并初始化为0。 |
void free(void *ptr) |
释放动态分配的内存。 |
void *malloc(size_t size) |
申请动态内存。 |
void *realloc(void *ptr, size_t size) |
重新申请动态内存。 |
终止执行
函数 |
说明 |
void abort(void) |
使一个异常程序终止。 |
int atexit(void (*func)(void)) |
当程序正常终止时,调用指定的函数 func。 |
void exit(int status) |
使程序正常终止。 |
注意:
abort
函数用于不正常地终止一个正在执行的程序,这个函数将引发SIGABRT
信号,可以为这个信号设置一个信号处理函数。
atexit
函数可以把一些函数注册为退出函数,当函数正常终止时(调用exit
终止程序,或者 main
函数返回时),退出函数将会被调用,退出函数不接受任何参数。
exit
函数用于正常的终止程序,如果程序以main
函数返回值结束,那么其效果相当于用该参数值调用exit
函数。
- 如果在如何一个
atexit
函数中调用exit
,将会导致无限循环,甚至可能只有当堆栈内存耗尽程序才会终止。
环境
函数 |
说明 |
char *getenv(const char *name) |
查找特定的名字,如果找到就返回一个指向其对应值的指针,程序不能修改返回的字符串,如果名字没有找到,函数返回一个NULL指针。 |
注意:
- 环境就是一个由编辑器定义的名字-值对应的列表,它由操作系统进行维护。
cout << "PATH:" << getenv("PATH")<< endl;
执行系统命令
函数 |
说明 |
int system(const char *string) |
把字符串参数传递给宿主操作系统,这样它就可以作为一条命令,由操作系统处理器执行。 |
注意:
system
函数可以使用参数NULL
调用,用于询问命令处理器是否真实存在,如果存在一个可用的系统命令处理器,返回一个非0值,否则返回0 。
排序和查找
函数 |
说明 |
void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *)) |
二分查找。 |
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) |
数组排序。 |
qsort
base
: 指向要排序的数组的第一个元素的指针。
nitems
:由 base 指向的数组中元素的个数。
size
:数组中每个元素的大小,以字节为单位。
compar
:用来比较两个元素的函数:
- 比较函数接受两个需要进行比较的值的指针。
- 比较函数返回一个整数,大于0,等于0,小于0分别表示第一个参数大于、等于、小于第二个参数。
int compareInt(const void* a, const void* b)
{
return (*((int*)a) - *((int*)b));
}
int main()
{
int array[5] = { 1,5,78,23,0};
qsort(array,5, sizeof(int), compareInt);
for (int i = 0; i < 5; i++)
printf("%d ", array[i]);
return(0);
}
bsearch
key
:指向要查找的元素的指针,类型转换为 void*
。
base
:指向进行查找的数组的第一个对象的指针,类型转换为 void*
。
nitems
:所指向的数组中元素的个数。
size
:组中每个元素的大小,以字节为单位。
compar
:用来比较两个元素的函数。
- 如果查找成功,该函数返回一个指向数组中匹配元素的指针,否则返回空指针。.
int compareInt(const void* a, const void* b)
{
return (*((int*)a) - *((int*)b));
}
int main()
{
int array[5] = { 1,5,78,23,0};
int key = 5;
int *item = (int*)bsearch(&key, array,5,sizeof(int),compareInt);
if (item == NULL) {
printf("not found the item\n");
}
else {
printf("found the item %d\n",*item);
}
return(0);
}
stdio.h
库变量
变量 |
说明 |
size_t |
符号整数类型,它是 sizeof 关键字的结果。 |
FILE |
存储文件流信息的对象类型。 |
fpos_t |
存储文件中任何位置的对象类型。 |
库宏
宏 |
说明 |
NULL |
空指针常量的值。 |
IOFBF、_IOLBF 和 _IONBF |
这些宏扩展了带有特定值的整型常量表达式,并适用于 setvbuf 函数的第三个参数。 |
BUFSIZ |
是一个整数,该整数代表了 setbuf 函数使用的缓冲区大小。 |
EOF |
表示已经到达文件结束的负整数。 |
FOPEN_MAX |
是一个整数,该整数代表了系统可以同时打开的文件数量。 |
FILENAME_MAX |
是一个整数,该整数代表了字符数组可以存储的文件名的最大长度。如果实现没有任何限制,则该值应为推荐的最大值。 |
L_tmpnam |
是一个整数,该整数代表了字符数组可以存储的由 tmpnam 函数创建的临时文件名的最大长度。 |
SEEK_CUR、SEEK_END 和 SEEK_SET |
在 fseek 函数中使用,用于在一个文件中定位不同的位置。 |
TMP_MAX |
是 tmpnam 函数可生成的独特文件名的最大数量。 |
stderr、stdin 和 stdout |
这些宏是指向 FILE 类型的指针,分别对应于标准错误、标准输入和标准输出流。 |
打开、关闭流
函数 |
说明 |
int fclose(FILE *stream) |
关闭流 stream。刷新所有的缓冲区。 |
FILE *fopen(const char *filename, const char *mode) |
使用给定的模式 mode 打开 filename 所指向的文件。 |
FILE *freopen(const char *filename, const char *mode, FILE *stream) |
把一个新的文件名 filename 与给定的打开的流 stream 关联,同时关闭流中的旧文件。 |
字符I/O
函数 |
说明 |
int fputc(int char, FILE *stream) |
把参数 char 指定的字符(一个无符号字符)写入到指定的流 stream 中,并把位置标识符往前移动。 |
int putc(int char, FILE *stream) |
把参数 char 指定的字符(一个无符号字符)写入到指定的流 stream 中,并把位置标识符往前移动。 |
int putchar(int char) |
把参数 char 指定的字符(一个无符号字符)写入到标准输出 stdout 中。 |
int fgetc(FILE *stream) |
从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。 |
int getc(FILE *stream) |
从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。 |
int getchar(void) |
从标准输入 stdin 获取一个字符(一个无符号字符)。 |
int ungetc(int char, FILE *stream) |
把字符 char(一个无符号字符)推入到指定的流 stream 中,以便它是下一个被读取到的字符。 |
未格式化的行I/O
函数 |
说明 |
int puts(const char *str) |
把一个字符串写入到标准输出 stdout,直到空字符,但不包括空字符。换行符会被追加到输出中。 |
char *gets(char *str) |
从标准输入 stdin 读取一行,并把它存储在 str 所指向的字符串中。当读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。 |
int fputs(const char *str, FILE *stream) |
把字符串写入到指定的流 stream 中,但不包括空字符。 |
char *fgets(char *str, int n, FILE *stream) |
从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。 |
格式化的行I/O
函数 |
说明 |
int fprintf(FILE *stream, const char *format, ...) |
发送格式化输出到流 stream 中。 |
int printf(const char *format, ...) |
发送格式化输出到标准输出 stdout。 |
int sprintf(char *str, const char *format, ...) |
发送格式化输出到字符串。 |
int fscanf(FILE *stream, const char *format, ...) |
从流 stream 读取格式化输入。 |
int scanf(const char *format, ...) |
从标准输入 stdin 读取格式化输入。 |
int sscanf(const char *str, const char *format, ...) |
从字符串读取格式化输入。 |
二进制I/O
函数 |
说明 |
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) |
从给定流 stream 读取数据到 ptr 所指向的数组中。 |
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) |
把 ptr 所指向的数组中的数据写入到给定流 stream 中。 |
刷新
函数 |
说明 |
int fflush(FILE *stream) |
刷新流 stream 的输出缓冲区。 |
定位
函数 |
说明 |
long int ftell(FILE *stream) |
返回给定流 stream 的当前文件位置。 |
int fseek(FILE *stream, long int offset, int whence) |
设置流 stream 的文件位置为给定的偏移 offset,参数 offset 意味着从给定的 whence 位置查找的字节数。 |
void rewind(FILE *stream) |
设置文件位置为给定流 stream 的文件的开头。 |
int fgetpos(FILE *stream, fpos_t *pos) |
获取流 stream 的当前文件位置,并把它写入到 pos。 |
int fsetpos(FILE *stream, const fpos_t *pos) |
设置给定流 stream 的文件位置为给定的位置。参数 pos 是由函数 fgetpos 给定的位置。 |
流错误
函数 |
说明 |
int feof(FILE *stream) |
测试给定流 stream 的文件结束标识符。 |
void clearerr(FILE *stream) |
清除给定流 stream 的文件结束和错误标识符。 |
int ferror(FILE *stream) |
测试给定流 stream 的错误标识符。 |
临时文件
函数 |
说明 |
char *tmpnam(char *str) |
生成并返回一个有效的临时文件名,该文件名之前是不存在的。 |
FILE *tmpfile(void) |
以二进制更新模式(wb+)创建临时文件。 |
文件操纵
函数 |
说明 |
int rename(const char *old_filename, const char *new_filename) |
把 old_filename 所指向的文件名改为 new_filename。 |
int remove(const char *filename) |
删除给定的文件名 filename,以便它不再被访问。 |
改变缓冲方式
函数 |
说明 |
void setbuf(FILE *stream, char *buffer) |
定义流 stream 应如何缓冲。 |
int setvbuf(FILE *stream, char *buffer, int mode, size_t size) |
另一个定义流 stream 应如何缓冲的函数。 |
错误描述
函数 |
说明 |
void perror(const char *str) |
把一个描述性错误消息输出到标准错误 stderr。首先输出字符串 str,后跟一个冒号,然后是一个空格。 |