C++ stdio.h详解

您所在的位置:网站首页 string与stdio C++ stdio.h详解

C++ stdio.h详解

2024-03-14 11:30| 来源: 网络整理| 查看: 265

一般地,在C语言或C++中,会把用来#include的文件的扩展名叫 .h,称其为头文件。 #include文件的目的就是把多个编译单元(也就是c或者cpp文件)公用的内容,单独放在一个文件里减少整体代码尺寸;或者提供跨工程公共代码。在现行的c++版本中,应用这个头文件应是#include。

目录 1 简介 2 引用方法 3 标准函数 4 文件内容 ▪ 文件说明 ▪ 宏定义 ▪ 结构体定义 ▪ 操作函数定义 简介

stdio 就是指 “standard input & output"(标准输入输出) 所以,源代码中如用到标准输入输出函数时,就要包含这个头文件! 例如c语言中的 printf("%d",i); scanf("%d",&i);等函数。

引用方法 #include

(注:在TC2.0中,允许不引用此头文件而直接调用其中的函数,但这种做法是不标准的。也不建议这样做。以避免出现在其他IDE中无法编译或执行的问题。)

标准函数

int getchar()

//从标准输入设备写入一个字符

int putchar()

//向标准输出设备读出一个字符

int scanf(char*format[,argument…])

//从标准输入设备读入格式化后的数据

int printf(char*format[,argument…])

//向标准输出设备输出格式化字符串

char* gets(char*string)

//从标准输入设备读入一个字符串

int puts(char*string)

//向标准输出设备输出一个字符串

int sprintf(charstring,charformat[,…])

//把格式化的数据写入某个字符串缓冲区

文件内容 文件说明 /* *stdio.h *This file has no copyright assigned and is placed in the Public Domain. *This file is a part of the mingw-runtime package. *Now arranty is given;refer to the file DISCLAIMER within the package. * *Definitions of types and proto types of functions for standard inputand output. * *NOTE:The file manipulation functions provided by Microsoft seem to *work with either slash(/) or backslash(\) as the directory separator. * */ 宏定义 #ifndef_STDIO_H_ #define_STDIO_H_ /*Alltheheadersincludethisfile.*/ #include #ifndefRC_INVOKED #define__need_size_t #define__need_NULL #define__need_wchar_t #define__need_wint_t #include #define__need___va_list #include #endif/*NotRC_INVOKED*/ /*Flagsfortheiobufstructure*/ #define_IOREAD1/*currentlyreading*/ #define_IOWRT2/*currentlywriting*/ #define_IORW0x0080/*openedas"r+w"*/ /* *Thethreestandardfilepointersprovidedbytheruntimelibrary. *NOTE:Thesewillgotothebit-bucketsilentlyinGUIapplications! */ #defineSTDIN_FILENO0 #defineSTDOUT_FILENO1 #defineSTDERR_FILENO2 /*Returnedbyvariousfunctionsonendoffileconditionorerror.*/ #defineEOF(-1) /* *Themaximumlengthofafilename.YoushoulduseGetVolumeInformation *insteadofthisconstant.Buthey,thisworks. *Alsodefinedinio.h. */ #ifndefFILENAME_MAX #defineFILENAME_MAX(260) #endif /* *Themaximumnumberoffilesthatmaybeopenatonce.Ihavesetthisto *aconservativenumber.Theactualvaluemaybehigher. */ #defineFOPEN_MAX(20) /*Aftercreatingthismanynames,tmpnamandtmpfilereturnNULL*/ #defineTMP_MAX32767 /* *Tmpnam,tmpfileand,sometimes,_tempnamtrytocreate *tempfilesintherootdirectoryofthecurrentdrive *(notinpwd,assuggestedbysomeolderMSdoc's). *RedefiningthesemacrosdoesnoteffecttheCRTfunctions. */ #define_P_tmpdir"\\" #ifndef__STRICT_ANSI__ #defineP_tmpdir_P_tmpdir #endif #define_wP_tmpdirL"\\" /* *Themaximumsizeofname(includingNUL)thatwillbeputintheuser *suppliedbuffercaNamefortmpnam. *Inferredfromthesizeofthestaticbufferreturnedbytmpnam *whenpassedaNULLargument.Mayactuallybesmaller. */ #defineL_tmpnam(16) #define_IOFBF0x0000/*fullbuffered*/ #define_IOLBF0x0040/*linebuffered*/ #define_IONBF0x0004/*notbuffered*/ #define_IOMYBUF0x0008/*stdiomalloc()'dbuffer*/ #define_IOEOF0x0010/*EOFreachedonread*/ #define_IOERR0x0020/*I/Oerrorfromsystem*/ #define_IOSTRG0x0040/*Strangeornofiledescriptor*/ #ifdef_POSIX_SOURCE #define_IOAPPEND0x0200 #endif /* *Thebuffersizeasusedbysetbufsuchthatitisequivalentto *(void)setvbuf(fileSetBuffer,caBuffer,_IOFBF,BUFSIZ). */ #defineBUFSIZ512 /*ConstantsfornOriginindicatingthepositionrelativetowhichfseek *setsthefileposition.Enclosedinifdefsbecauseio.hcouldalso *definethem.(Thoughnotanymoresinceio.hincludesthisfilenow.)*/ #ifndefSEEK_SET #defineSEEK_SET(0) #endif #ifndefSEEK_CUR #defineSEEK_CUR(1) #endif #ifndefSEEK_END #defineSEEK_END(2) #endif #ifndefRC_INVOKED #ifndef__VALIST #ifdef__GNUC__ #define__VALIST__gnuc_va_list #else #define__VALISTchar* #endif #endif/*defined__VALIST*/ /* *ThestructureunderlyingtheFILEtype. * *Somebelievethatnobodyintheirrightmindshouldmakeuseofthe *internalsofthisstructure.ProvidedbyPedroA.ArandaGutiirrez */ #ifndef_FILE_DEFINED #define_FILE_DEFINED 结构体定义 typedefstruct_iobuf { char*_ptr; int_cnt; char*_base; int_flag; int_file; int_charbuf; int_bufsiz; char*_tmpfname; }FILE; #endif/*Not_FILE_DEFINED*/ /* *Thestandardfilehandles */ #ifndef__DECLSPEC_SUPPORTED externFILE(*_imp___iob)[];/*ApointertoanarrayofFILE*/ #define_iob(*_imp___iob)/*AnarrayofFILE*/ #else/*__DECLSPEC_SUPPORTED*/ __MINGW_IMPORTFILE_iob[];/*AnarrayofFILEimportedfromDLL.*/ #endif/*__DECLSPEC_SUPPORTED*/ #definestdin(&_iob[STDIN_FILENO]) #definestdout(&_iob[STDOUT_FILENO]) #definestderr(&_iob[STDERR_FILENO]) 操作函数定义 #ifdef__cplusplus extern"C"{ #endif /* *FileOperations */ _CRTIMPFILE*__cdeclfopen(constchar*,constchar*); _CRTIMPFILE*__cdeclfreopen(constchar*,constchar*,FILE*); _CRTIMPint__cdeclfflush(FILE*); _CRTIMPint__cdeclfclose(FILE*); /*MSputsremove&rename(butnotwideversions)inio.halso*/ _CRTIMPint__cdeclremove(constchar*); _CRTIMPint__cdeclrename(constchar*,constchar*); _CRTIMPFILE*__cdecltmpfile(void); _CRTIMPchar*__cdecltmpnam(char*); #ifndef__STRICT_ANSI__ _CRTIMPchar*__cdecl_tempnam(constchar*,constchar*); _CRTIMPint__cdecl_rmtmp(void); #ifndefNO_OLDNAMES _CRTIMPchar*__cdecltempnam(constchar*,constchar*); _CRTIMPint__cdeclrmtmp(void); #endif #endif/*__STRICT_ANSI__*/ _CRTIMPint__cdeclsetvbuf(FILE*,char*,int,size_t); _CRTIMPvoid__cdeclsetbuf(FILE*,char*); /* *FormattedOutput */ _CRTIMPint__cdeclfprintf(FILE*,constchar*,...); _CRTIMPint__cdeclprintf(constchar*,...); _CRTIMPint__cdeclsprintf(char*,constchar*,...); _CRTIMPint__cdecl_snprintf(char*,size_t,constchar*,...); _CRTIMPint__cdeclvfprintf(FILE*,constchar*,__VALIST); _CRTIMPint__cdeclvprintf(constchar*,__VALIST); _CRTIMPint__cdeclvsprintf(char*,constchar*,__VALIST); _CRTIMPint__cdecl_vsnprintf(char*,size_t,constchar*,__VALIST); #ifndef__NO_ISOCEXT/*externsinlibmingwex.a*/ int__cdeclsnprintf(char*s,size_tn,constchar*format,...); __CRT_INLINEint__cdecl vsnprintf(char*s,size_tn,constchar*format,__VALISTarg) {return_vsnprintf(s,n,format,arg);} int__cdeclvscanf(constchar*__restrict__,__VALIST); int__cdeclvfscanf(FILE*__restrict__,constchar*__restrict__, __VALIST); int__cdeclvsscanf(constchar*__restrict__, constchar*__restrict__,__VALIST); #endif /* *FormattedInput */ _CRTIMPint__cdeclfscanf(FILE*,constchar*,...); _CRTIMPint__cdeclscanf(constchar*,...); _CRTIMPint__cdeclsscanf(constchar*,constchar*,...); /* *CharacterInputandOutputFunctions */ _CRTIMPint__cdeclfgetc(FILE*); _CRTIMPchar*__cdeclfgets(char*,int,FILE*); _CRTIMPint__cdeclfputc(int,FILE*); _CRTIMPint__cdeclfputs(constchar*,FILE*); _CRTIMPchar*__cdeclgets(char*); _CRTIMPint__cdeclputs(constchar*); _CRTIMPint__cdeclungetc(int,FILE*); /*Traditionally,getcandputcaredefinedasmacros.butthe standarddoesn'tsaythattheymustbemacros. Weuseinlinefunctionsheretoallowthefastversions tobeusedinC++withnamespacequalification,eg.,::getc. _filbufand_flsbufarenotthread-safe.*/ _CRTIMPint__cdecl_filbuf(FILE*); _CRTIMPint__cdecl_flsbuf(int,FILE*); #if!defined_MT __CRT_INLINEint__cdeclgetc(FILE*__F) { return(--__F->_cnt>=0) ?(int)(unsignedchar)*__F->_ptr++ :_filbuf(__F); } __CRT_INLINEint__cdeclputc(int__c,FILE*__F) { return(--__F->_cnt>=0) ?(int)(unsignedchar)(*__F->_ptr++=(char)__c) :_flsbuf(__c,__F); } __CRT_INLINEint__cdeclgetchar(void) { return(--stdin->_cnt>=0) ?(int)(unsignedchar)*stdin->_ptr++ :_filbuf(stdin); } __CRT_INLINEint__cdeclputchar(int__c) { return(--stdout->_cnt>=0) ?(int)(unsignedchar)(*stdout->_ptr++=(char)__c) :_flsbuf(__c,stdout);} #else/*Uselibraryfunctions.*/ _CRTIMPint__cdeclgetc(FILE*); _CRTIMPint__cdeclputc(int,FILE*); _CRTIMPint__cdeclgetchar(void); _CRTIMPint__cdeclputchar(int); #endif /* *DirectInputandOutputFunctions */ _CRTIMPsize_t__cdeclfread(void*,size_t,size_t,FILE*); _CRTIMPsize_t__cdeclfwrite(constvoid*,size_t,size_t,FILE*); /* *FilePositioningFunctions */ _CRTIMPint__cdeclfseek(FILE*,long,int); _CRTIMPlong__cdeclftell(FILE*); _CRTIMPvoid__cdeclrewind(FILE*); #ifdef__USE_MINGW_FSEEK/*Theseareinlibmingwex.a*/ /* *Workaroundforlimitationsonwin9xwhereafilecontentsare *notzero'doutifyouseekpasttheendandthenwrite. */ int__cdecl__mingw_fseek(FILE*,long,int); int__cdecl__mingw_fwrite(constvoid*,size_t,size_t,FILE*); #definefseek(fp,offset,whence)__mingw_fseek(fp,offset,whence) #definefwrite(buffer,size,count,fp)__mingw_fwrite(buffer,size,count,fp) #endif/*__USE_MINGW_FSEEK*/ /* *Anopaquedatatypeusedforstoringfilepositions...Thecontentsof *thistypeareunknown,butwe(thecompiler)needtoknowthesize *becausetheprogrammerusingfgetposandfsetposwillbesettingaside *storageforfpos_tstructres.ActuallyItestedusingabytearrayand *itisfairlyevidentthatthefpos_ttypeisalong(inCRTDLL.DLL). *Perhapsanunsignedlong?TODO?It'sdefinitelya64-bitnumberin *MSVCRThowever,andfornow`longlong'willdo. */ #ifdef__MSVCRT__ typedeflonglongfpos_t; #else typedeflongfpos_t; #endif _CRTIMPint__cdeclfgetpos(FILE*,fpos_t*); _CRTIMPint__cdeclfsetpos(FILE*,constfpos_t*); /* *ErrorFunctions */ _CRTIMPint__cdeclfeof(FILE*); _CRTIMPint__cdeclferror(FILE*); #ifdef__cplusplus inlineint__cdeclfeof(FILE*__F) {return__F->_flag&_IOEOF;} inlineint__cdeclferror(FILE*__F) {return__F->_flag&_IOERR;} #else #definefeof(__F)((__F)->_flag&_IOEOF) #defineferror(__F)((__F)->_flag&_IOERR) #endif _CRTIMPvoid__cdeclclearerr(FILE*); _CRTIMPvoid__cdeclperror(constchar*); #ifndef__STRICT_ANSI__ /* *Pipes */ _CRTIMPFILE*__cdecl_popen(constchar*,constchar*); _CRTIMPint__cdecl_pclose(FILE*); #ifndefNO_OLDNAMES _CRTIMPFILE*__cdeclpopen(constchar*,constchar*); _CRTIMPint__cdeclpclose(FILE*); #endif /* *OtherNonANSIfunctions */ _CRTIMPint__cdecl_flushall(void); _CRTIMPint__cdecl_fgetchar(void); _CRTIMPint__cdecl_fputchar(int); _CRTIMPFILE*__cdecl_fdopen(int,constchar*); _CRTIMPint__cdecl_fileno(FILE*); _CRTIMPint__cdecl_fcloseall(void); _CRTIMPFILE*__cdecl_fsopen(constchar*,constchar*,int); #ifdef__MSVCRT__ _CRTIMPint__cdecl_getmaxstdio(void); _CRTIMPint__cdecl_setmaxstdio(int); #endif #ifndef_NO_OLDNAMES _CRTIMPint__cdeclfgetchar(void); _CRTIMPint__cdeclfputchar(int); _CRTIMPFILE*__cdeclfdopen(int,constchar*); _CRTIMPint__cdeclfileno(FILE*); #endif/*Not_NO_OLDNAMES*/ #define_fileno(__F)((__F)->_file) #ifndef_NO_OLDNAMES #definefileno(__F)((__F)->_file) #endif #ifdefined(__MSVCRT__)&&!defined(__NO_MINGW_LFS) #include __CRT_INLINEFILE*__cdeclfopen64(constchar*filename,constchar*mode) { returnfopen(filename,mode); } int__cdeclfseeko64(FILE*,off64_t,int); #ifdef__USE_MINGW_FSEEK int__cdecl__mingw_fseeko64(FILE*,off64_t,int); #definefseeko64(fp,offset,whence)__mingw_fseeko64(fp,offset,whence) #endif __CRT_INLINEoff64_t__cdeclftello64(FILE*stream) { fpos_tpos; if(fgetpos(stream,&pos)) return-1LL; else return((off64_t)pos); } #endif/*__NO_MINGW_LFS*/ #endif/*Not__STRICT_ANSI__*/ /*Wideversions*/ #ifndef_WSTDIO_DEFINED /*alsoinwchar.h-keepinsync*/ _CRTIMPint__cdeclfwprintf(FILE*,constwchar_t*,...); _CRTIMPint__cdeclwprintf(constwchar_t*,...); _CRTIMPint__cdeclswprintf(wchar_t*,constwchar_t*,...); _CRTIMPint__cdecl_snwprintf(wchar_t*,size_t,constwchar_t*,...); _CRTIMPint__cdeclvfwprintf(FILE*,constwchar_t*,__VALIST); _CRTIMPint__cdeclvwprintf(constwchar_t*,__VALIST); _CRTIMPint__cdeclvswprintf(wchar_t*,constwchar_t*,__VALIST); _CRTIMPint__cdecl_vsnwprintf(wchar_t*,size_t,constwchar_t*,__VALIST); _CRTIMPint__cdeclfwscanf(FILE*,constwchar_t*,...); _CRTIMPint__cdeclwscanf(constwchar_t*,...); _CRTIMPint__cdeclswscanf(constwchar_t*,constwchar_t*,...); _CRTIMPwint_t__cdeclfgetwc(FILE*); _CRTIMPwint_t__cdeclfputwc(wchar_t,FILE*); _CRTIMPwint_t__cdeclungetwc(wchar_t,FILE*); #ifdef__MSVCRT__ _CRTIMPwchar_t*__cdeclfgetws(wchar_t*,int,FILE*); _CRTIMPint__cdeclfputws(constwchar_t*,FILE*); _CRTIMPwint_t__cdeclgetwc(FILE*); _CRTIMPwint_t__cdeclgetwchar(void); _CRTIMPwchar_t*__cdecl_getws(wchar_t*); _CRTIMPwint_t__cdeclputwc(wint_t,FILE*); _CRTIMPint__cdecl_putws(constwchar_t*); _CRTIMPwint_t__cdeclputwchar(wint_t); _CRTIMPFILE*__cdecl_wfdopen(int,wchar_t*); _CRTIMPFILE*__cdecl_wfopen(constwchar_t*,constwchar_t*); _CRTIMPFILE*__cdecl_wfreopen(constwchar_t*,constwchar_t*,FILE*); _CRTIMPFILE*__cdecl_wfsopen(constwchar_t*,constwchar_t*,int); _CRTIMPwchar_t*__cdecl_wtmpnam(wchar_t*); _CRTIMPwchar_t*__cdecl_wtempnam(constwchar_t*,constwchar_t*); _CRTIMPint__cdecl_wrename(constwchar_t*,constwchar_t*); _CRTIMPint__cdecl_wremove(constwchar_t*); _CRTIMPvoid__cdecl_wperror(constwchar_t*); _CRTIMPFILE*__cdecl_wpopen(constwchar_t*,constwchar_t*); #endif/*__MSVCRT__*/ #ifndef__NO_ISOCEXT/*externsinlibmingwex.a*/ int__cdeclsnwprintf(wchar_t*s,size_tn,constwchar_t*format,...); __CRT_INLINEint__cdecl vsnwprintf(wchar_t*s,size_tn,constwchar_t*format,__VALISTarg) {return_vsnwprintf(s,n,format,arg);} int__cdeclvwscanf(constwchar_t*__restrict__,__VALIST); int__cdeclvfwscanf(FILE*__restrict__, constwchar_t*__restrict__,__VALIST); int__cdeclvswscanf(constwchar_t*__restrict__, constwchar_t*__restrict__,__VALIST); #endif #define_WSTDIO_DEFINED #endif/*_WSTDIO_DEFINED*/ #ifndef__STRICT_ANSI__ #ifdef__MSVCRT__ #ifndefNO_OLDNAMES _CRTIMPFILE*__cdeclwpopen(constwchar_t*,constwchar_t*); #endif/*notNO_OLDNAMES*/ #endif/*MSVCRTruntime*/ /* *OtherNonANSIwidefunctions */ _CRTIMPwint_t__cdecl_fgetwchar(void); _CRTIMPwint_t__cdecl_fputwchar(wint_t); _CRTIMPint__cdecl_getw(FILE*); _CRTIMPint__cdecl_putw(int,FILE*); #ifndef_NO_OLDNAMES _CRTIMPwint_t__cdeclfgetwchar(void); _CRTIMPwint_t__cdeclfputwchar(wint_t); _CRTIMPint__cdeclgetw(FILE*); _CRTIMPint__cdeclputw(int,FILE*); #endif/*Not_NO_OLDNAMES*/ #endif/*__STRICT_ANSI*/ #ifdef__cplusplus } #endif #endif/*NotRC_INVOKED*/ #endif/*_STDIO_H_*/

stdio.h所包含的函数:

文件访问

fopen freopen fflush fclose

二进制输入/输出

fread fwrite

非格式化输入/输出

fgetc/getc fputc/putc ungetc fgets fputs

格式化输入/输出

scanf/fscanf/sscanf printf/fprintf/sprintf perror

文件定位

ftell fseek fgetpos fsetpos rewind

错误处理

feof ferror

文件操作

remove rename tmpfile

本人第七次写文章,如有不足,请多多指教哦! 最后,动动小手,帮我点个赞吧!

如果认为作者的文章好的话,就打个赏吧!QQ号:2552972485



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3