找回密码
 注册
关于网站域名变更的通知

C语言常用的标准库

2023-2-2 15:42| 查看: 87| 评论: 0

摘要: 有很多工程师喜欢自己封装一些标准库已有的函数,其实自己封装的函数,并不一定比标准库好,有时候反而代码更冗余,且有bug。下面就来分享一下C语言常见的一些标准库。 标准头文件包括:$ `9 R: \- D2 z+ e% ...
有很多工程师喜欢自己封装一些标准库已有的函数,其实自己封装的函数,并不一定比标准库好,有时候反而代码更冗余,且有bug。下面就来分享一下C语言常见的一些标准库。



标准头文件包括:
$ `9 R: \- D2 z+ e% \! ~9 ^! c


<asset.h>    <ctype.h>     <errno.h>     <float.h><limits.h>   <locale.h>    <math.h>      <setjmp.h><signal.h>   <stdarg.h>    <stddef.h>    <stdlib.h><stdio.h>    <string.h>    <time.h>一、标准定义(<stddef.h>) . a6 X! B) d' x, M8 q, p0 r
文件<stddef.h>里包含了标准库的一些常用定义,无论我们包含哪个标准头文件,<stddef.h>都会被自动包含进来。

+ {9 t8 E' ?" i# q

这个文件里定义:

类型size_t(sizeof运算符的结果类型,是某个无符号整型);
* W. ^9 k' a0 q0 h2 j" B& l% O
/ J2 w/ B( J6 e. }# a% X
* V4 [" x! {- ?( B
类型ptrdiff_t(两个指针相减运算的结果类型,是某个有符号整型);
# q7 Z# |8 f% Z

$ x, p1 G' ~: t" I$ J
类型wchar_t(宽字符类型,是一个整型,其中足以存放本系统所支持的所有本地环境中的字符集的所有编码值。这里还保证空字符的编码值为0);
; V. `& E4 [9 e3 }/ D


符号常量NULL(空指针值);

% s$ v2 T; n0 p9 G
. }8 b  n/ I: Q& e8 d6 G  k7 I
宏offsetot (这是一个带参数的宏,第一个参数应是一个结构类型,第二个参数应是结构成员名。
& N8 [) E9 O6 P2 C) x! Z: O- K


offsetot(s,m)
求出成员m在结构类型t的变量里的偏移量)。
5 F6 z% \. ^0 m9 c

, }0 c/ W8 j) E' J
注:其中有些定义也出现在其他头文件里(如NULL)。

" A1 p: j4 b  y5 D$ c5 I! w
0 s5 Z! Q' b8 O' C7 a) Y6 k
二、错误信息(<errno.h>)

<errno.h>定义了一个int类型的表达式errno,可以看作一个变量,其初始值为0,一些标准库函数执行中出错时将它设为非0值,但任何标准库函数都设置它为0。



<errno.h>里还定义了两个宏EDOM和ERANGE,都是非0的整数值。数学函数执行中遇到参数错误,就会将errno置为EDOM,如出现值域错误就会将errno置为ERANGE。


5 i* p2 b% B% K- v) m8 W0 m, H
三、输入输出函数(<stdio.h>)

文件打开和关闭:



FILE *fopen(const char *filename, const char *mode);int fclose(FILE * stream);字符输入输出:


int fgetc(FILE *fp);int fputc(int c, FILE *fp);getc和putc与这两个函数类似,但通过宏定义实现。通常有下面定义:
  • * Q. ^; Q. g* o. y! _

#define getchar()  getc(stdin)#define putchar(c) putc(c, stdout)int ungetc(int c, FILE* stream);  //把字符 c 退回流 stream
格式化输入输出:



int scanf(const char *format, ...);int printf(const char *format, ...);int fscanf(FILE *stream, const char *format, ...);int fprintf(FILE *stream, const char *format, ...);int sscanf(char *s, const char *format, ...);int sprintf(char *s, const char *format, ...);
行式输入输出:
/ z1 j3 s. q. {, }: E* Z4 n


char *fgets(char *buffer, int n, FILE *stream);int fputs(const char *buffer, FILE *stream);char *gets(char *s);int puts(const char *s);
直接输入输出:
: a! r7 u1 ~/ s
  • 4 ]: w2 {6 Y" l; X

size_t fread(void *pointer, size_t size, size_t num, FILE *stream);size_t fwrite(const void *pointer, size_t size, size_t num, FILE *stream);
本站资讯文章系编辑转载,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!
[声明]本站文章版权归原作者所有 内容为作者个人观点 本站只提供参考并不构成任何投资及应用建议。
本站拥有对此声明的最终解释权。
收藏 邀请
关闭

推荐内容上一条 /1 下一条

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-9-21 02:43 , Processed in 0.140625 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

返回顶部