美文网首页c语言
c语言进阶 c和指针(七)

c语言进阶 c和指针(七)

作者: 我就是一个垃圾 | 来源:发表于2019-01-13 00:38 被阅读8次

这一篇主要讲各种标准函数库,每个函数库中有哪些函数,详细列表以及使用

一、stdio.h

stdio .h 头文件定义了三个变量类型、一些宏和各种函数来执行输入和输出。

三个变量:

1:size_t

2:FILE :这是一个适合存储文件流信息的对象类型。

3:fpos_t :这是一个适合存储文件中任何位置的对象类型。

定义的几个宏:

1:NULL

2:_IOFBF、_IOLBF、_IONBF:这些宏为带有特定值的整型常量表达式,并适用于 setvbuf 函数的第三个参数。

3:BUFSIZ:这个宏是一个整数,该整数代表了 setbuf 函数使用的缓冲区大小。

4:EOF:表示一个已经达到文件结束的负整数。

5:FOPEN_MAX:是一个整数,表示系统可以同时打开的文件数量。

6:FILENAME_MAX:一个整数,代表了字符数组可以存储的文件名的最大长度。

7:L_tmpnam:是一个整数,该整数代表了字符数组可以存储的由 tmpnam 函数创建的临时文件名的最大长度。

8:SEEK_CUR、SEEK_END和SEEK_SET:用于fseek函数,表示在一个文件中的不同位置。

9:TMP_MAX:是 tmpnam 函数可生成的独特文件名的最大数量。

10:stderr、stdin和stdout:分别表示标准错误、标准输入、标准输出流。

一些函数:

文件操作函数

remove函数

函数原型: int remove(const char *filename);

函数描述:删除给定的文件名 filename,以便它不再被访问。

函数返回:如果成功,则返回零。如果错误,则返回 -1,并设置 errno。

rename函数

函数原型: int rename(const char *old_filename, const char *new_filename);

函数描述: 把 old_filename 所指向的文件名改为 new_filename。

函数返回:如果成功,则返回零。如果错误,则返回 -1,并设置 errno。

tmpfile函数

函数原型: FILE *tmpfile(void);

函数描述:以二进制更新模式(wb+)创建临时文件。被创建的临时文件会在流关闭的时候或者在程序终止的时候自动删除。

函数返回:如果成功,该函数返回一个指向被创建的临时文件的流指针。如果文件未被创建,则返回 NULL。

tmpnam函数

函数原型:char *tmpnam(char *str) ;

函数描述:生成并返回一个有效的临时文件名,该文件名之前是不存在的。如果 str 为空,则只会返回临时文件名。

函数返回:返回一个有效的临时文件名。

文件获取类函数:

fclose函数

函数原型:int fclose(FILE *stream) ;

函数描述:关闭流,并刷新所有的缓冲区。

函数返回:如果流成功关闭,则该方法返回零。如果失败,则返回 EOF。

特点:

1:fclose与fopen对应,当打开一个流,就要记得关闭一个流。当程序结束时,会自动关闭打开的流。

2:若打开一个流,而没有关闭,可能造成的问题是,数据没有及时的同步磁盘上,或数据根本就无法读写。

3:若想不用关闭流,就将数据及时的刷新出去,用fflush函数。

fflush函数

函数原型:int fflush ( FILE * stream );

函数描述:刷新流stream的输出缓冲区。

函数返回:如果成功,该函数返回零值。如果发生错误,则返回 EOF,且设置错误标识符(即 feof)。

特点:

1:函数结束后,流仍打开。

fopen函数

函数原型:FILE * fopen ( const char * filename, const char * mode );

函数描述:使用给定的模式mode打开filename所指向的文件。

函数返回:成功返回一个FILE指针,否则返回 NULL。

Mode类型:

模式 描述

“r” 打开一个用于读取的文件。该文件必须存在。

“w” 创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。

“a” 追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。

“r+” 打开一个用于更新的文件,可读取也可写入。该文件必须存在。

“w+” 创建一个用于读写的空文件。若文件已存在,将会丢弃文件中的内容。

“a+” 打开一个用于读取和追加的文件。若该文件不存在,将自动创建。

若想以二进制形式打开文件,可以在后面加上字符‘b’。

特点:

1:fopen打开的流,默认全缓冲。

2:在定义文件指针时,要将文件指针指向空;如 FILE *fp = NULL;

3:文件操作完成后,需要将文件关闭,否则会造成文件所占用内存泄漏和在下次访问文件时出现问题。

freopen函数

函数原型:FILE *freopen(const char *filename, const char *mode, FILE *stream);

函数描述:把一个新的文件名 filename 与给定的打开的流 stream 关联,同时关闭流中的旧文件。

函数返回:如果文件成功打开,则函数返回一个指针,指向用于标识流的对象。否则,返回空指针。

特点:

1:关于mode,参考fopen。

2:该函数常用于重定向stdin,stdout,stderr流。该函数可以在不改变代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的。

3:使用该函数在输入输出流间进行反复的重定向时,极有可能导致流指针得到不被期待的结果,使输入输出发生异常,所以如果需要在文件的输入输出和标准输入输出流之间进行切换,建议使用fopen或者是C++标准的ifstream及ofstream。

setbuf函数

函数原型:void setbuf(FILE *stream, char *buffer );

函数描述:定义流 stream 应如何缓冲。

buffer:这是分配给用户的缓冲,它的长度至少为 BUFSIZ 字节。

函数返回:该函数无返回。

特点:

1:该函数应在与流 stream 相关的文件被打开时,且还未发生任何输入或输出操作之前被调用一次。

2:若buffer不为null,表示以全缓冲的方式执行流操作;若buffer为null,表示不缓冲。

setvbuf函数

函数原型:int setvbuf(FILE *stream, char *buffer, int mode, size_t size);

函数描述:定义流 stream 应如何缓冲。允许定义流的缓冲方式及缓冲大小。

函数返回:如果成功,则该函数返回 0,否则返回非零值。

特点:

1:关于mode

模式 描述

_IOFBF 全缓冲:对于输出,数据在缓冲填满时被一次性写入。对于输入,缓冲会在请求输入且缓冲为空时被填充。

_IOLBF 行缓冲:对于输出,数据在遇到换行符或者在缓冲填满时被写入,具体视情况而定。对于输入,缓冲会在请求输入且缓冲为空时被填充,直到遇到下一个换行符。

_IONBF 无缓冲:不使用缓冲。每个 I/O 操作都被即时写入。buffer 和 size 参数被忽略。

2:如果buffer为null,该函数会自动分配一个指定大小的缓冲

3:该函数应在与流 stream 相关的文件被打开时,且还未发生任何输入或输出操作之前被调用一次。

格式化输入输出函数:

fprintf函数

函数原型:int fprintf(FILE *stream, const char *format, …) ;

函数描述:发送格式化输出到流 stream 中。

函数返回:如果成功,则返回写入的字符总数,否则返回一个负数。

特点:

1:关于format

format格式:%[flags][width][.precision][length]specifier

对于specifier可见下表:

格式字符 意义

d 以十进制形式输出带符号整数(正数不输出符号)

o 以八进制形式输出无符号整数

x/X 以十六进制形式输出无符号整数(大小写X分别表示输出字符大小写)

u 以十进制形式输出无符号整数

lu 以十进制形式输出无符号长整型(time_t类型)

f 以小数形式输出单、双精度实数

e,E 以指数形式输出单、双精度实数

g,G 以%f 或%e 中较短的输出宽度输出单、双精度实数

c 输出单个字符

s 输出字符串

p 输出指针地址

% 输出一个字符

对于flags、width、precision、length等,在使用时可查阅。

fscanf函数

函数原型:int fscanf ( FILE * stream, const char * format, … );

函数描述:按照某种格式从流中读取字符

函数返回:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。

特点:

1:对于format,参考fprintf

2:要读入的字符必须已经存在,且字符的类型要与format一致。

printf函数

函数原型:int printf(const char *format, …);

函数描述:发送格式化输出到标准输出。

函数返回:如果成功,则返回写入的字符总数,否则返回一个负数。

1:对于format,参考fprintf

scanf函数

函数原型:int scanf(const char *format, …) ;

函数描述:从标准输入stdin读取格式化输入。

函数返回:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。

特点:

1:对于format,参考fprintf

2:要读入的字符必须已经存在,且字符的类型要与format一致。

snprintf函数

函数原型:int snprintf ( char * s, size_t n, const char * format, … );

函数描述:将一定长度(n字符)的数据按某种格式写入字符串。

函数返回:若写入成功,返回欲写入的字符数。若写入出错,返回一个负值。

特点:

1:只有当返回值是一个非负值且小于n是,才能确保数据全部写入到字符串s中,且会在字符串最后加上’\0’。

2:若格式化后的字符串长度大于等于n,则只将其中的size-1个字符复制到s中,并在其最后加上’\0’。

3:返回值为欲写入的字符串长度(不包括最后的’\0’),而不是成功写入的字符数。

4:相较于sprintf,snprintf更安全。

sprintf函数

函数原型:int sprintf(char *str, const char *format, …) ;

函数描述:发送格式化输出到str所指向的字符串。

函数返回:如果成功,则返回成功写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。

特点:

1:str的存储空间应该足够大,以使得全部数据都能写入。若空间不够大,可能有溢出的风险。

2:函数会自动在字符串的最后加上’\0’。

sscanf函数

函数原型:int sscanf(const char *str, const char *format, …);

函数描述:从字符串读取格式化输入。

函数返回:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。

特点:

1:* 亦可用于格式中, (即 %d 和 %*s) 加了星号 表示跳过此数据不读入。

2:其他种类的format在用到时可上网查阅。

vfprintf函数

函数原型:int vfprintf(FILE *stream, const char *format, va_list arg);

函数描述:使用参数列表发送格式化输出到流stream中。

函数返回:如果成功,则返回写入的字符总数,否则返回一个负数。

vfscanf函数

函数原型:int vfscanf ( FILE * stream, const char * format, va_list arg );

函数描述:使用参数列表发送格式化输入到流stream中。

函数返回:如果成功,则返回读取的字符总数,否则返回一个负数。

vprintf函数

函数原型:int vprintf(const char *format, va_list arg);

函数描述:使用参数列表发送格式化输出到标准输出stdout。

函数返回:如果成功,则返回写入的字符总数,否则返回一个负数。

vsprintf函数

函数原型:int vsprintf(char *str, const char *format, …);

函数描述:使用参数列表发送格式化输出到字符串。

函数返回:如果成功,则返回写入的字符总数,否则返回一个负数。

另有vscanf,vsscanf,vsnprintf等函数。在使用时,可以查阅参考。

字符输入输出类函数

fgetc函数

函数原型:int fgetc(FILE *stream);

函数描述:从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。

函数返回:该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。

特点:

1:该函数与getc函数等价,除了getc函数可在某些库里作为宏使用。

补充:为何fgetc函数(包括getc、getchar以及fputc、putc、putchar)会返回一个int型?原因是为了允许函数报告函数的末尾(EOF)。因为EOF被定义为一个整型,它的值在任何可能出现的字符范围之外。

fgets函数

函数原型:char *fgets(char *str, int n, FILE *stream);

函数描述:从指定的流stream读取一行,并把它存储在str所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

函数返回:如果成功,该函数返回相同的str参数。如果到达文件末尾或者没有读取到任何字符,str的内容保持不变,并返回一个空指针。如果发生错误,返回一个空指针。

特点:

1:n是要读取的最大字符数(包括最后的空字符)。

2:函数会自动在str字符串的最后加上’\0’。

3:一个换行符会终止该函数,但是该函数会认为换行符是有效字符,会读进str中。

fputc函数

函数原型:int fputc(int char, FILE *stream);

函数描述:把参数 char 指定的字符(一个无符号字符)写入到指定的流 stream 中,并把位置标识符往前移动。

函数返回:如果没有发生错误,则返回被写入的字符。如果发生错误,则返回 EOF,并设置错误标识符。

fputs函数

函数原型:int fputs(const char *str, FILE *stream);

函数描述:把字符串写入到指定的流stream中,但不包括空字符。

函数返回:该函数返回一个非负值,如果发生错误则返回EOF。

特点:

1:fputs与puts的不同,不仅在于fputs可以指定一个流,而且fputs不会写入额外的字符,而puts会在流结尾自动添加一个换行符。

getc函数

函数原型:int getc(FILE *stream);

函数描述:从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。

函数返回:该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。

getchar函数

函数原型:int getchar(void);

函数描述:从标准输入stdin获取一个字符(一个无符号字符)。这等同于 getc以 stdin 作为参数。

函数返回:该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。

gets函数

函数原型:char *gets(char *str);

函数描述:从标准输入 stdin 读取一行,并把它存储在 str 所指向的字符串中。当读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

函数返回:如果成功,该函数返回 str。如果发生错误或者到达文件末尾时还未读取任何字符,则返回 NULL。

特点:

1:函数会自动在str字符串的最后加上’\0’。

2:与fgets不同,gets不会读取换行符。

putc函数

函数原型:int putc(int char, FILE *stream);

函数描述:把参数 char 指定的字符(一个无符号字符)写入到指定的流 stream 中,并把位置标识符往前移动。

函数返回:该函数以无符号char强制转换为int的形式返回写入的字符,如果发生错误则返回EOF。

特点:

1:改函数与fputc函数等价,除了该函数可以作为某些库的宏外。

putchar函数

函数原型:int putchar(int char);

函数描述:把参数char指定的字符(一个无符号字符)写入到标准输出 stdout 中。

函数返回:该函数以无符号char强制转换为int的形式返回写入的字符,如果发生错误则返回EOF。

puts函数

函数原型:int puts(const char *str);

函数描述:把一个字符串写入到标准输出 stdout,直到空字符,但不包括空字符。换行符会被追加到输出中。

函数返回:如果成功,该函数返回一个非负值,如果发生错误则返回 EOF。

ungetc函数

函数原型:int ungetc(int char, FILE *stream);

函数描述:把字符 char(一个无符号字符)推入到指定的流 stream 中,以便它是下一个被读取到的字符。

函数返回:如果成功,则返回被推入的字符,否则返回EOF,且流stream保持不变。

特点:

1:stream必须是输入流而不能是输出流。

2:该函数常用语字符串中对某个字符的替换。

3:若对流进行fseek,rewind等操作,会使得流丢弃所有该函数推入的字符。

直接读取函数(二进制IO)

fread函数

函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

函数描述:从给定流stream读取数据到ptr所指向的数组中。size表示每个字符的大小,nmemb表示读取的字符总数。

函数返回:成功读取的元素总数会以 size_t 对象返回,如果返回值与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾(分别返回ferror和feof)。

fwrite函数

函数原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

函数描述:把ptr所指向的数组中的数据写入到给定流stream中。

函数返回:如果成功,该函数返回一个 size_t 对象,表示元素的总数。如果该数字与 nmemb 参数不同,则会显示一个错误。

文件定位函数

fgetpos函数

函数原型:int fgetpos(FILE *stream, fpos_t *pos);

函数描述:获取流stream的当前文件位置,并把它写入到pos。

函数返回:如果成功,该函数返回零。如果发生错误,则返回非零值。

fseek函数

函数原型:int fseek(FILE *stream, long int offset, int whence);

函数描述:设置流stream的文件位置为给定的偏移offset,参offset意味着从给定的whence 位置查找的字节数。

函数返回:如果成功,则该函数返回零,否则返回非零值。

特点:

1:whence表示开始添加偏移的位置,通常它指3个常量,分别是SEEK_SET,SEEK_CUR,SEEK_END。

fsetpos函数

函数原型:int fsetpos(FILE *stream, const fpos_t *pos);

函数描述:设置给定流stream的文件位置为给定的位置。参数pos是由函数fgetpos给定的位置。

函数返回:如果成功,该函数返回零值,否则返回非零值。

特点:

ftell函数

函数原型:long int ftell(FILE *stream);

函数描述:返回给定流stream的当前文件位置。

函数返回:该函数返回位置标识符的当前值。如果发生错误,则返回 -1L,全局变量 errno 被设置为一个正值。

特点:

1:若流为二进制流,返回值表示距离流开始的字节数。

rewind函数

函数原型:void rewind(FILE *stream);

函数描述:设置文件位置为给定流stream的文件的开头。

函数返回:无返回。

错误处理函数

clearerr函数

函数原型:void clearerr(FILE *stream);

函数描述:清除给定流 stream 的文件结束和错误标识符。

函数返回:这不会失败,且不会设置外部变量 errno,但是如果它检测到它的参数不是一个有效的流,则返回 -1,并设置 errno 为 EBADF。

feof函数

函数原型:int feof(FILE *stream);

函数描述:测试给定流 stream 的文件结束标识符。

函数返回:当到达文件结尾时,返回非零,否则返回零。

ferror函数

函数原型:int ferror(FILE *stream);

函数描述:测试给定流 stream 的错误标识符。

函数返回:如果设置了与流关联的错误标识符,该函数返回一个非零值,否则返回一个零值。即出错返回非零,没出错返回零。

perror函数

函数原型:void perror(const char *str);

函数描述:把一个描述性错误消息输出到标准错误 stderr。首先输出字符串 str,后跟一个冒号,然后是一个空格。

函数返回:无返回。

参考:

1:http://www.runoob.com/cprogramming/c-standard-library-stdio-h.html

2:http://www.cplusplus.com/reference/cstdio/


二、stdlib.h

stdlib 头文件即standard library(标准库)头文件,里面包含了C、C++语言的最常用的系统函数。包括动态内存管理、随机数生成、与环境之间的通信、整数运算、搜索、排序及转换等。

stdlib .h 头文件定义了四个变量类型、五个宏和各种通用工具函数。

4个变量:

size_t

wchar_t(一个宽字符常量大小的整数类型)

div_t(div函数返回的结构)

ldiv_t(ldiv 函数返回的结构)。

1.size_t

2.wchar_t(一个宽字符常量大小的整数类型)

3.div_t(div函数返回的结构)

4.ldiv_t(ldiv 函数返回的结构)。

5个宏:

NULL;

EXIT_FAILURE;  exit 函数失败时要返回的值

EXIT_SUCCESS;  exit 函数成功时要返回的值

RAND_MAX;      rand 函数返回的最大值;

MB_CUR_MAX  在多字节字符集中的最大字符数

一些主要的函数

•atof函数

函数原型:double atof (const char* str);

函数描述:把参数 str 所指向的字符串转换为一个浮点数。

函数返回:函数返回转换后的双精度浮点数,如果没有执行有效的转换,则返回零(0.0)。

特点:

1:函数会不理会字符串开始之后的空格,直到遇到第一个有效字符,从第一个有效字符开始,到最后一个有效字符为止,函数会将这段字符转换为浮点数。最后一个有效字符之后的字符不会影响该函数。

2:对于C90,有效字符包括以下条件:可以以+-字符作为字符串的开始;字符串中可以出现(不超过)一个.符;可以出现表示指数形式的E或e字符,且其后可以跟一个有效字符串。

3:对于C99/C11,除C90的条件外,还支持0x/0X前缀,INF,NAN等。

•atoi函数

函数原型:int atoi(const char *str);

函数描述:把参数 str 所指向的字符串转换为一个整数。

函数返回:返回转换后的长整数,如果没有执行有效的转换,则返回零。

特点:

1:函数会忽略字符串刚开始的空格,直到遇到第一个有效字符。

2:+和-位于第一个字符是被认为是有效字符。最后一个有效字符之后的字符不会影响该函数。

3:若转换后的数据长度超出int所表示的最大范围,将产生未定义的行为。

•atol函数

函数原型:long int atol(const char *str);

函数描述:把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。

函数返回:返回转换后的长整数,如果没有执行有效的转换,则返回零。

特点:与atoi一致。

•strtod函数

函数原型:double strtod(const char *str, char **endptr);

函数描述:把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。

函数返回:返回转换后的双精度浮点数,如果没有执行有效的转换,则返回零(0.0)。

特点:

1:函数会忽略字符串刚开始的空格,直到遇到第一个有效字符。

2:如果 endptr 不为空,则它指向转换中最后一个有效字符后的字符所在的地址。

3:实际使用中常将endptr设为null,表示不关注无效字符。

•strtol函数

函数原型:long int strtol(const char *str, char **endptr, int base);

函数描述:把参数 str 所指向的字符串根据给定的 base 转换为一个长整数,base 必须介于 2 和 36(包含)之间,或者是特殊值 0。

函数返回:函数返回转换后的长整数,如果没有执行有效的转换,则返回一个零值。

特点:

1.对于base,若base为0,则要求:首字母可以是(+/-),若首字母不是0或0x/0X,则必须是十进制的其他字符,且按照10进制进行转换;若首字母是0或0x/0X,则分别按照8进制或16进制转换,开始的0及x/X会被忽略,在此过程中,超出8进制和16进制的字符会被认为是无效字符(如0912会被转化为0,因为会按照8进制来转换,9被认为是无效字符)。

2:若为36进制,则为从0~z/Z。

3:其余特点参考strtod。

•strtoul函数

函数原型:unsigned long int strtoul(const char *str, char **endptr, int base);

函数描述:把参数 str 所指向的字符串根据给定的 base 转换为一个无符号长整数,base 必须介于 2 和 36(包含)之间,或者是特殊值 0。

函数返回:返回转换后的长整数,如果没有执行有效的转换,则返回一个零值。

特点:参考strtol

•calloc函数

函数原型:void *calloc(size_t nitems, size_t size);

函数描述:分配所需的内存空间,并返回一个指向它的指针。nitems表示要被分配的元素个数。size表示每个元素的大小。

函数返回:返回一个指针,指向已分配的内存。如果请求失败,则返回 NULL。

特点:

1:malloc 和 calloc 之间的不同点是,malloc 不会设置内存为零,而 calloc 会设置分配的内存为零。

•free函数

函数原型:void free(void *ptr);

函数描述:释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。

函数返回:不返回任何值。

特点:

1:如果传递的参数是一个空指针,则不会执行任何动作。

2:如果指针指向的内存不是由calloc、malloc 或 realloc 所分配,则函数会发生未定义的结果。

3:函数不会改变指针的值(指向),只是现在指向的内存区域无效。(Notice that this function does not change the value of ptr itself, hence it still points to the same (now invalid) location.)

•malloc函数

函数原型:void *malloc(size_t size);

函数描述:分配所需的内存空间,并返回一个指向它的指针。size表示要申请的字节数。

函数返回:返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回NULL。

•realloc函数

函数原型:void *realloc(void *ptr, size_t size) ;

函数描述:尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。

函数返回:返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回NULL。

特点:

1:ptr指针指向一个要重新分配内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。如果为空指针,则会分配一个新的内存块,且函数返回一个指向它的指针(类似malloc)。

2:新的内存块的大小,以字节为单位。如果大小为 0,且 ptr 指向一个已存在的内存块,则 ptr 所指向的内存块会被释放,并返回一个空指针。

3:如果请求失败,则返回NULL,此时不影响ptr所指向的内存。

•abort函数

函数原型:void abort(void);

函数描述:异常中止程序执行,直接从调用的地方跳出。

函数返回:无返回。

特点:

1:abort函数导致所有的流被关闭和冲洗。

2:abort函数用以解除进程对SIGABRT信号的阻止。

•atexit函数

函数原型:int atexit(void (*func)(void)) ;

函数描述:当程序正常终止时,调用指定的函数func。

函数返回:如果函数成功注册,则该函数返回零,否则返回一个非零值。

特点:

1:可以在任何地方注册你的终止函数,但它会在程序终止的时候被调用。

2:若一个程序中出现多次atexit函数,则其按照栈的方式执行(最后一个先执行,以此类推)。

•exit函数

函数原型:void exit(int status);

函数描述:(正常)立即终止调用进程。status – 返回给父进程的状态值。

对于status,如果其为0或者EXIT_SUCCESS,表示成功;如果其为EXIT_FAILURE,表示失败。

函数返回:无返回。

特点:

1:任何属于该进程的打开的文件描述符都会被关闭,该进程的子进程由进程 1 继承,初始化,且会向父进程发送一个 SIGCHLD 信号。

•getenv函数

函数原型:char *getenv(const char *name);

函数描述:搜索name所指向的环境字符串,并返回相关的值给字符串。

函数返回:返回一个以 null 结尾的字符串,该字符串为被请求环境变量的值。如果该环境变量不存在,则返回 NULL。

•system函数

函数原型:int system(const char *command);

函数描述:把 command 指定的命令名称或程序名称传给要被命令处理器执行的主机环境,并在命令完成后返回。

函数返回:如果发生错误,则返回值为-1,否则返回命令的状态。

特点:

1:如果command为null,则只是为了测试指令系统是否有效,若有效,返回非0,否则返回0。

•bsearch函数

函数原型:void bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void , const void *));

函数描述:对 nitems 对象的数组执行二分查找,base 指向进行查找的数组,key 指向要查找的元素,size 指定数组中每个元素的大小。数组的内容应根据 compar 所对应的比较函数升序排序。

函数返回:如果查找成功,该函数返回一个指向数组中匹配元素的指针,否则返回空指针。

特点:

1:对于compar函数,若返回值小于0,表示要查找的值小于当前值;若返回值等于0,表示要查找的值等于当前值;若返回值大于0,表示要查找的值大于当前值。

2:若数组中有多个满足条件的值,则函数可能返回任意一个,不一定是第一个。

3:复杂度log2(num)+2。

•qsort函数

函数原型:void qsort(void base, size_t nitems, size_t size, int (*compar)(const void , const void*));

函数描述:对数组进行排序。base指向要排序的数组的第一个元素的指针。nitems 由 base 指向的数组中元素的个数。size数组中每个元素的大小,以字节为单位。compar 用来比较两个元素的函数。

返回值:无返回值。

特点:

1:不稳定排序(其实是基于快速排序的操作)。

2:复杂度num*log2(num)。

•abs函数与labs函数

函数原型:int abs(int x);long int abs(long int x);

函数描述:取x得绝对值。

函数返回:返回x的绝对值。

特点:

1:对于浮点型及负数的取绝对值,分别定义在头文件cmath.h及头问价complex.h中。

•div函数与ldiv函数

函数原型:div_t div(int numer, int denom); div_t div(long int numer, long int denom);

函数描述:把 numer(分子)除以 denom(分母)。

函数返回:返回定义在

rand函数

函数原型:int rand(void) ;

函数描述:伪随机数生成函数。

函数返回:返回一个范围在 0 到 RAND_MAX 之间的伪随机数。

特点:

1:RAND_MAX 是一个常量,它的默认值在不同的实现中会有所不同,但是值至少是 32767。

2:若随机数生成种子相同,则每次调用rand()生成的伪随机数是相同的。

3:若使用rand函数前没有调用srand函数,系统会自动调用srand函数。

•srand函数

函数原型:void srand(unsigned int seed);

函数描述:播种由函数rand使用的随机数发生器。seed是一个整型值,用于伪随机数生成算法播种。

函数返回:无返回。

特点:

1:不同的seed会使得此后调用rand函数生成不同的伪随机数。

2:如果seed设置为1,rand函数将生成和之前一样的伪随机序列。

3:为了保持seed的独特性,通常的做法是使用time函数返回作为seed值。如srand(time(&t));

此外,stdlib头文件还有一些处理多字节的函数,在使用过程中可自行查阅。

参考:

http://www.runoob.com/cprogramming/c-standard-library-stdlib-h.html

http://www.cplusplus.com/reference/cstdlib/

---------------------

作者:hmxz2nn

来源:CSDN

原文:https://blog.csdn.net/hmxz2nn/article/details/79056350

版权声明:本文为博主原创文章,转载请附上博文链接!



相关文章

  • c语言进阶 c和指针(七)

    这一篇主要讲各种标准函数库,每个函数库中有哪些函数,详细列表以及使用 一、stdio.h stdio .h 头文件...

  • 深入理解C指针

    标签(空格分隔): C语言进阶 本文将会持续更新。。。。 指向指针的指针 在c语言中指针的操作时通过指针变量来实现...

  • c语言进阶 c和指针(三)

    这一篇主要写语句和操作符及表达式 一、if语句 if和while语句即使只有一句话最好也写上大括号,有格式感,这是...

  • c语言进阶 c和指针(五)

    这里讲一讲函数的可变参数列表和字符串和字符以及结构体联合体和动态内存分配 一、可变参数列表 C 语言允许定义参数数...

  • c语言进阶 c和指针(六)

    这一篇主要讲各种输入输出函数 一、流的概念 需要说明的是,现在基本上不建议用gets()了,c11中已经彻底取消了...

  • C语言进阶 c和指针(八)

    C语言常用头文件总结 序号 库类别头文件 1字符处理 ctype.h 2地区化 local.h 3数学函数 mat...

  • c语言进阶 c和指针(一)

    我打算写一个系列的c语言进阶的内容,基础的东西将不会罗列出来 我将按照《c和指针》这本书的顺序,并且加入自己的想法...

  • c语言进阶 c和指针(二)

    这一篇主要说一说数据 一、基本数据类型 C语言中只有四种基本数据类型——整形(字符也算是一种整形,枚举也算是一种整...

  • c语言进阶 c和指针(四)

    写一篇文章主要讲指针以及数组,内容源于朱有鹏老师的上课笔记,我懒了,直接拿过来用了 一.指针 4.3.1.指针到底...

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

网友评论

    本文标题:c语言进阶 c和指针(七)

    本文链接:https://www.haomeiwen.com/subject/dflqdqtx.html