详细讲解C++中的 cstdio
cstdio 是 C++ 标准库中的一个头文件,提供了一些与标准 I/O 操作相关的函数和类型。它是 C 语言头文件 stdio.h 的 C++ 版本,因此包含了 C 语言标准库的所有函数。以下是 cstdio 中常用的函数和类型:
文件操作
fopen 和 fclose
fopen 函数用于打开一个文件,并返回一个指向该文件的指针。该函数的原型如下:
FILE* fopen(const char* filename, const char* mode);
其中,filename 表示文件名,mode 表示文件打开模式,例如 "r" 表示读取模式,"w" 表示写入模式,"a" 表示追加模式。如果文件打开成功,该函数返回一个指向文件的指针,否则返回 NULL。
fclose 函数用于关闭一个文件,它的原型如下:
int fclose(FILE* stream);
其中,stream 表示文件指针,如果文件关闭成功,返回 0,否则返回一个非零值。
fread 和 fwrite
fread 函数用于从一个文件中读取数据,它的原型如下:
size_t fread(void* ptr, size_t size, size_t count, FILE* stream);
其中,ptr 表示读取数据的缓冲区地址,size 表示每个数据项的大小,count 表示数据项的数量,stream 表示文件指针。如果读取成功,该函数返回实际读取的数据项数量,否则返回一个小于 count 的值。
fwrite 函数用于向一个文件中写入数据,它的原型如下:
size_t fwrite(const void* ptr, size_t size, size_t count, FILE* stream);
其中,ptr 表示写入数据的缓冲区地址,size 表示每个数据项的大小,count 表示数据项的数量,stream 表示文件指针。如果写入成功,该函数返回实际写入的数据项数量,否则返回一个小于 count 的值。
fprintf 和 fscanf
fprintf 函数用于向一个文件中输出格式化的数据,它的原型如下:
int fprintf(FILE* stream, const char* format, ...);
其中,stream 表示文件指针,format 表示输出格式,与 printf 函数的格式相同。如果输出成功,该函数返回输出的字符数,否则返回一个负数。
fscanf 函数用于从一个文件中读取格式化的数据,它的原型如下:
int fscanf(FILE* stream, const char* format, ...);
其中,stream 表示文件指针,format 表示输入格式,与 scanf 函数的格式相同。如果读取成功,该函数返回输入的数据项数量,否则返回一个负数。
标准输入输出
scanf 和 printf
scanf 函数用于从标准输入中读取格式化的数据,它的原型如下:
int scanf(const char* format, ...);
其中,format 表示输入格式,与 fscanf 函数的格式相同。如果读取成功,该函数返回输入的数据项数量,否则返回一个负数。
printf 函数用于向标准输出中输出格式化的数据,它的原型如下:
int printf(const char* format, ...);
其中,format 表示输出格式,与 fprintf 函数的格式相同。如果输出成功,该函数返回输出的字符数,否则返回一个负数。
getchar 和 putchar
getchar 函数用于从标准输入中读取一个字符,它的原型如下:
int getchar();
如果读取成功,该函数返回读取到的字符,否则返回 EOF。
putchar 函数用于向标准输出中输出一个字符,它的原型如下:
int putchar(int c);
其中,c 表示要输出的字符,如果输出成功,该函数返回输出的字符,否则返回一个负数。
其他函数和类型
FILE 类型
FILE 类型是一个结构体类型,表示一个文件流。它的定义如下:
typedef struct _iobuf {
char* _ptr;
int _cnt;
char* _base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char* _tmpfname;
} FILE;fseek 和 ftell
fseek 函数用于设置文件流的位置,它的原型如下:
int fseek(FILE* stream, long int offset, int origin);
其中,stream 表示文件指针,offset 表示相对于 origin 的偏移量,origin 表示起始位置。如果设置成功,该函数返回 0,否则返回一个非零值。
ftell 函数用于获取文件流的当前位置,它的原型如下:
long int ftell(FILE* stream);
如果获取成功,该函数返回当前位置的偏移量,否则返回一个负数。
perror
perror 函数用于输出最近一次系统调用的错误信息,它的原型如下:
void perror(const char* str);
其中,str 表示自定义错误信息的前缀。该函数会输出 str 和最近一次系统调用的错误信息,以及一个换行符。
以上是 cstdio 中常用的一些函数和类型。在实际编程中,我们经常需要用到这些函数和类型来进行文件读写、输入输出等操作。

