簡介
stdio .h 頭文件定義了三個變量類型、一些宏和各種函數來執行輸入和輸出。
庫變量
下面是頭文件 stdio.h 中定義的變量類型:
1:size_t 這是無符號整數類型,它是 sizeof 關鍵字的結果。
2:FILE 這是一個適合存儲文件流信息的對象類型。
3:fpos_t 這是一個適合存儲文件中任何位置的對象類型。
庫宏
下面是頭文件 stdio.h 中定義的宏:
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
這些宏是指向 FILE 類型的指針,分別對應於標準錯誤、標準輸入和標準輸出流。
庫函數
下面是頭文件 stdio.h 中定義的函數:
爲了更好地理解函數,請按照下面的序列學習這些函數,因爲第一個函數中創建的文件會在後續的函數中使用到。
1:int fclose(FILE *stream)
關閉流 stream。刷新所有的緩衝區。
2:void clearerr(FILE *stream)
清除給定流 stream 的文件結束和錯誤標識符。
3:int feof(FILE *stream)
測試給定流 stream 的文件結束標識符。
4:int ferror(FILE *stream)
測試給定流 stream 的錯誤標識符。
5:int fflush(FILE *stream)
刷新流 stream 的輸出緩衝區。
6: int fgetpos(FILE *stream, fpos_t *pos)
獲取流 stream 的當前文件位置,並把它寫入到 pos。
7:FILE *fopen(const char *filename, const char *mode)
使用給定的模式 mode 打開 filename 所指向的文件。
8:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
從給定流 stream 讀取數據到 ptr 所指向的數組中。
9: FILE *freopen(const char *filename, const char *mode, FILE *stream)
把一個新的文件名 filename 與給定的打開的流 stream 關聯,同時關閉流中的舊文件。
10:int fseek(FILE *stream, long int offset, int whence)
設置流 stream 的文件位置爲給定的偏移 offset,參數 offset 意味着從給定的 whence 位置查找的字節數。
11: int fsetpos(FILE *stream, const fpos_t *pos)
設置給定流 stream 的文件位置爲給定的位置。參數 pos 是由函數 fgetpos 給定的位置。
12:long int ftell(FILE *stream)
返回給定流 stream 的當前文件位置。
13:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
把 ptr 所指向的數組中的數據寫入到給定流 stream 中。
14:int remove(const char *filename)
刪除給定的文件名 filename,以便它不再被訪問。
15:int rename(const char *old_filename, const char *new_filename)
把 old_filename 所指向的文件名改爲 new_filename。
16:void rewind(FILE *stream)
設置文件位置爲給定流 stream 的文件的開頭。
17:void setbuf(FILE *stream, char *buffer)
定義流 stream 應如何緩衝。
18:int setvbuf(FILE *stream, char *buffer, int mode, size_t size)
另一個定義流 stream 應如何緩衝的函數。
19:FILE *tmpfile(void)
以二進制更新模式(wb+)創建臨時文件。
20:char *tmpnam(char *str)
生成並返回一個有效的臨時文件名,該文件名之前是不存在的。
21:int fprintf(FILE *stream, const char *format, …)
發送格式化輸出到流 stream 中。
22:int printf(const char *format, …)
發送格式化輸出到標準輸出 stdout。
23:int sprintf(char *str, const char *format, …)
發送格式化輸出到字符串。
24:int vfprintf(FILE *stream, const char *format, va_list arg)
使用參數列表發送格式化輸出到流 stream 中。
25:int vprintf(const char *format, va_list arg)
使用參數列表發送格式化輸出到標準輸出 stdout。
26:int vsprintf(char *str, const char *format, va_list arg)
使用參數列表發送格式化輸出到字符串。
27:int fscanf(FILE *stream, const char *format, …)
從流 stream 讀取格式化輸入。
28:int scanf(const char *format, …)
從標準輸入 stdin 讀取格式化輸入。
29:int sscanf(const char *str, const char *format, …)
從字符串讀取格式化輸入。
30:int fgetc(FILE *stream)
從指定的流 stream 獲取下一個字符(一個無符號字符),並把位置標識符往前移動。
31:char *fgets(char *str, int n, FILE *stream)
從指定的流 stream 讀取一行,並把它存儲在 str 所指向的字符串內。當讀取 (n-1) 個字符時,或者讀取到換行符時,或者到達文件末尾時,它會停止,具體視情況而定。
32:int fputc(int char, FILE *stream)
把參數 char 指定的字符(一個無符號字符)寫入到指定的流 stream 中,並把位置標識符往前移動。
33:int fputs(const char *str, FILE *stream)
把字符串寫入到指定的流 stream 中,但不包括空字符。
34:int getc(FILE *stream)
從指定的流 stream 獲取下一個字符(一個無符號字符),並把位置標識符往前移動。
35:int getchar(void)
從標準輸入 stdin 獲取一個字符(一個無符號字符)。
36:char *gets(char *str)
從標準輸入 stdin 讀取一行,並把它存儲在 str 所指向的字符串中。當讀取到換行符時,或者到達文件末尾時,它會停止,具體視情況而定。
37:int putc(int char, FILE *stream)
把參數 char 指定的字符(一個無符號字符)寫入到指定的流 stream 中,並把位置標識符往前移動。
38:int putchar(int char)
把參數 char 指定的字符(一個無符號字符)寫入到標準輸出 stdout 中。
39:int puts(const char *str)
把一個字符串寫入到標準輸出 stdout,直到空字符,但不包括空字符。換行符會被追加到輸出中。
40:int ungetc(int char, FILE *stream)
把字符 char(一個無符號字符)推入到指定的流 stream 中,以便它是下一個被讀取到的字符。
41:void perror(const char *str)
把一個描述性錯誤消息輸出到標準錯誤 stderr。首先輸出字符串 str,後跟一個冒號,然後是一個空格。
42:int snprintf(char *str, size_t size, const char *format, …)
格式字符串到 str 中。
參考資料
https://www.runoob.com/cprogramming/c-standard-library-stdio-h.html