【C++Builder】C ランタイムライブラリリファレンス (stdio.h)

# 入出力 (Standard Input/Output)

| ヘッダ<br>ファイル | [stdio.h](https://docwiki.embarcadero.com/RADStudio/ja/Stdio.h%EF%BC%9A%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9) |
|:---|:---|
| 規格 | ANSI C (C89) / C90 |
| 概要 | 3 つの型、幾つかのマクロ及び入出力を行う幾つかの関数を宣言する。|

## プラグマ

## 型

| 名前 | 機能 |
|:---|:---|
| FILE | ストリームを管理するための構造体。 |
| fpos_t | ファイル位置を表す型。 |
| (size_t) | [sizeof()](https://docwiki.embarcadero.com/RADStudio/ja/Sizeof) が返す符号なし整数型。 |

## マクロ

### I/O バッファリングスタイル

ファイルで使用するバッファリングスタイルを定義するための定数です。

| 名前 | 機能 |
|:---|:---|
| [_IOFBF](https://docwiki.embarcadero.com/RADStudio/ja/IOxxx_define) | ファイルはフルバッファリングされます。 |
| [_IOLBF](https://docwiki.embarcadero.com/RADStudio/ja/IOxxx_define) | ファイルは行バッファリングされます。 |
| [_IONBF](https://docwiki.embarcadero.com/RADStudio/ja/IOxxx_define) | ファイルはバッファリングされません。 |

### 最大値

| 名前 | 機能 |
|:---|:---|
| [FOPEN_MAX](https://docwiki.embarcadero.com/RADStudio/ja/OPEN_MAX_define)    | プロセス当たりの最大ファイル数です。 |
| FILENAME_MAX | ファイル名文字列を十分に保持できる配列のサイズです。 |
| [L_tmpnam](https://docwiki.embarcadero.com/RADStudio/Athens/ja/L_tmpnam_define)     | [tmpnam()](https://docwiki.embarcadero.com/RADStudio/ja/Tmpnam%EF%BC%8C_wtmpnam) が生成するファイル名文字列を十分に保持できる配列のサイズです。 |
| [TMP_MAX](https://docwiki.embarcadero.com/RADStudio/ja/TMP_MAX_define)      | [tmpnam()](https://docwiki.embarcadero.com/RADStudio/ja/Tmpnam%EF%BC%8C_wtmpnam) が生成する一意なファイル名の最大数です (最小で 25)。 |

### シーク

| 名前 | 機能 |
|:---|:---|
| [SEEK_CUR](https://docwiki.embarcadero.com/RADStudio/Athens/ja/Lseek)     | 現在のファイルポインタの位置です。 |
| [SEEK_END](https://docwiki.embarcadero.com/RADStudio/Athens/ja/Lseek)     | ファイルの終わり（EOF）です。 |
| [SEEK_SET](https://docwiki.embarcadero.com/RADStudio/Athens/ja/Lseek)     | ファイルの先頭です。 |

### ストリーム

プログラムの開始時に自動的に開かれる定義済みのストリームです。

| 名前 | 機能 |
|:---|:---|
| [stderr](https://docwiki.embarcadero.com/RADStudio/ja/Stderr%EF%BC%8Cstdin%EF%BC%8Cstdout) | 標準入力デバイス。 |
| [stdin](https://docwiki.embarcadero.com/RADStudio/ja/Stderr%EF%BC%8Cstdin%EF%BC%8Cstdout)  | 標準出力デバイス。 |
| [stdout](https://docwiki.embarcadero.com/RADStudio/ja/Stderr%EF%BC%8Cstdin%EF%BC%8Cstdout) | 標準エラー出力デバイス。 |

### その他

| 名前 | 機能 |
|:---|:---|
| [BUFSIZ](https://docwiki.embarcadero.com/RADStudio/ja/BUFSIZ_define)       | [setbuf()](https://docwiki.embarcadero.com/RADStudio/ja/Setbuf) 関数によって使用されるデフォルトのバッファサイズです。 |
| [EOF](https://docwiki.embarcadero.com/RADStudio/ja/EOF_define)             | ファイルの終わり（EOF）に到達したことを示す定数です。 |
| [(NULL)](https://docwiki.embarcadero.com/RADStudio/ja/NULL_define)        | 任意のデータオブジェクトポインタと互換性があるヌルポインタ定数です。 |


## 引数付きマクロ

## 関数
| 名前 | 機能 |
|:---|:---|
| [clearerr()](https://docwiki.embarcadero.com/RADStudio/ja/Clearerr)                           | エラーインジケータをリセットします。 | 
| [fclose()](https://docwiki.embarcadero.com/RADStudio/ja/Fclose)                               | ストリームを閉じます。 | 
| [feof()](https://docwiki.embarcadero.com/RADStudio/ja/Feof)                                   | ストリームのファイルの終わり（EOF）を検出します。 | 
| [ferror()](https://docwiki.embarcadero.com/RADStudio/ja/Ferror)                               | ストリームのエラーを検出します。 | 
| [fflush()](https://docwiki.embarcadero.com/RADStudio/ja/Fflush)                               | ストリームをフラッシュします。 | 
| [fgetc()](https://docwiki.embarcadero.com/RADStudio/ja/Fgetc%EF%BC%8Cfgetwc)                  | ストリームから文字を取得します。 | 
| [fgetpos()](https://docwiki.embarcadero.com/RADStudio/ja/Fgetpos)                             | 現在のファイルポインタを取得します。 | 
| [fgets()](https://docwiki.embarcadero.com/RADStudio/ja/Fgets%EF%BC%8Cfgetws)                  | ストリームから文字列を取得します。 | 
| [fopen()](https://docwiki.embarcadero.com/RADStudio/ja/Fopen%EF%BC%8C_wfopen)                 | ストリームを開きます。<br>要確認: C11 以降なら fopen_s() で代替。 | 
| [fprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Fprintf%EF%BC%8Cfwprintf)            | ストリームに書式付き出力を書き込みます。 | 
| [fputc()](https://docwiki.embarcadero.com/RADStudio/ja/Fputc%EF%BC%8Cfputwc)                  | ストリームに 1 文字を出力します。 | 
| [fputs()](https://docwiki.embarcadero.com/RADStudio/ja/Fputs%EF%BC%8Cfputws)                  | ストリームに文字列を出力します。 | 
| [fread()](https://docwiki.embarcadero.com/RADStudio/ja/Fread)                                 | ストリームからデータを読み取ります。 | 
| [freopen()](https://docwiki.embarcadero.com/RADStudio/ja/Freopen%EF%BC%8C_wfreopen)           | オープンストリームに新しいファイルを関連付けます。<br>要確認: C11 以降なら freopen() で代替。 | 
| [fscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Fscanf%EF%BC%8Cfwscanf)               | ストリームからの入力をスキャンして書式設定します。 | 
| [fseek()](https://docwiki.embarcadero.com/RADStudio/ja/Fseek)                                 | ストリーム上のファイル ポインタの位置を変更します。 | 
| [fsetpos()](https://docwiki.embarcadero.com/RADStudio/ja/Fsetpos)                             | ストリームのファイルポインタの位置を変更します。 | 
| [ftell()](https://docwiki.embarcadero.com/RADStudio/ja/Ftell)                                 | 現在のファイルポインタを返します。 | 
| [fwrite()](https://docwiki.embarcadero.com/RADStudio/ja/Fwrite)                               | ストリームに書き込みます。 | 
| [getc()](https://docwiki.embarcadero.com/RADStudio/ja/Getc%EF%BC%8Cgetwc)                     | ストリームから文字を取得します [^2]。 | 
| [getchar()](https://docwiki.embarcadero.com/RADStudio/ja/Getchar%EF%BC%8Cgetwchar)            | stdin から文字を取得します。getc(stdin) [^2]。 | 
| [gets()](https://docwiki.embarcadero.com/RADStudio/ja/Gets%EF%BC%8C_getws)                    | stdin から文字列を取得します。<br>非推奨: fgets() で代替。<br>C11 で削除されている。C11 以降なら gets_s() で代替。 | 
| [perror()](https://docwiki.embarcadero.com/RADStudio/ja/Perror%EF%BC%8C_wperror)              | システムエラーメッセージを出力します。 | 
| [printf()](https://docwiki.embarcadero.com/RADStudio/ja/Printf%E3%80%81wprintf)               | 書式付き出力を stdout に書き込みます。 | 
| [putc()](https://docwiki.embarcadero.com/RADStudio/ja/Putc%EF%BC%8Cputwc)                     | 文字をストリームに出力します [^2]。 | 
| [putchar()](https://docwiki.embarcadero.com/RADStudio/ja/Putchar%EF%BC%8Cputwchar)            | 文字を stdout に出力します。putc(c, stdout) [^2]。 | 
| [puts()](https://docwiki.embarcadero.com/RADStudio/ja/Puts%EF%BC%8C_putws)                    | stdout に文字列を出力します。 | 
| [remove()](https://docwiki.embarcadero.com/RADStudio/ja/Remove%EF%BC%8C_wremove)              | ファイルを削除します。 | 
| [rename()](https://docwiki.embarcadero.com/RADStudio/ja/Rename%EF%BC%8C_wrename)              | ファイル名を変更します。 | 
| [rewind()](https://docwiki.embarcadero.com/RADStudio/ja/Rewind)                               | ファイルポインタの位置をストリームの先頭に変更します。<br>要確認: [fseek()](https://docwiki.embarcadero.com/RADStudio/ja/Fseek) で代替。 | 
| [scanf()](https://docwiki.embarcadero.com/RADStudio/ja/Scanf,_wscanf)                         | stdin ストリームからの入力を、スキャンおよび書式設定します。 | 
| [setbuf()](https://docwiki.embarcadero.com/RADStudio/ja/Setbuf)                               | ストリームにバッファリングを割り当てます。<br>要確認: [setvbuf()](https://docwiki.embarcadero.com/RADStudio/ja/Setvbuf) で代替。 | 
| [setvbuf()](https://docwiki.embarcadero.com/RADStudio/ja/Setvbuf)                             | ストリームにバッファリングを割り当てます。 | 
| [snprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Snprintf_%E3%81%A8_snwprintf) [^1]  | 最大長 nsize のバッファに書式付き出力を格納します。 | 
| [sprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Sprintf%EF%BC%8Cswprintf)            | 文字列に書式付き出力を書き込みます。 | 
| [sscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Sscanf%EF%BC%8Cswscanf)               | 文字列からの入力をスキャンして書式設定します。 | 
| [tmpfile()](https://docwiki.embarcadero.com/RADStudio/ja/Tmpfile)                             | まったく新しいファイルをバイナリモードで開きます。 | 
| [tmpnam()](https://docwiki.embarcadero.com/RADStudio/ja/Tmpnam%EF%BC%8C_wtmpnam)              | 一意のファイル名を作成します。 | 
| [ungetc()](https://docwiki.embarcadero.com/RADStudio/ja/Ungetc%EF%BC%8Cungetwc)               | 入力ストリームに 1 文字を戻します。 | 
| [vfprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Vfprintf%EF%BC%8Cvfwprintf)         | ストリームに書式付き出力を書き込みます。 | 
| [vfscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Vfscanf) [^1]                       | ストリームからの入力をスキャンして書式設定します。 | 
| [vprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Vprintf%EF%BC%8Cvwprintf)            | stdout に書式付き出力を書き込みます。 | 
| [vscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Vscanf) [^1]                          | stdin からの入力をスキャンして書式設定します。 | 
| [vsnprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Vsnprintf%E3%80%81vsnwprintf) [^1] | 最大長 nsize のバッファに書式付き出力を格納します。 | 
| [vsprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Vsprintf%EF%BC%8Cvswprintf)         | 文字列に書式付き出力を書き込みます。 | 
| [vsscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Vsscanf) [^1]                        | ストリームからの入力をスキャンして書式設定します。 | 

:::note
ワイド文字用の関数が [wchar.h](https://qiita.com/ht_deko/items/5eaf661c0b3452845672) で定義されています。
:::

### printf() と scanf()

printf() 系と scanf() 系の分類です。

| 接頭 | 対象 | printf() | vprintf() | scanf() | vscanf() |
|:---:|:---|:---|:---|:---|:---|
|     | 標準入出力 | [printf()](https://docwiki.embarcadero.com/RADStudio/ja/Printf%E3%80%81wprintf)   | [vprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Vprintf%EF%BC%8Cvwprintf)    |  [scanf()](https://docwiki.embarcadero.com/RADStudio/ja/Scanf,_wscanf)   | [vscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Vscanf) [^1]  |
| f   | ストリーム | [fprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Fprintf%EF%BC%8Cfwprintf)  | [vfprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Vfprintf%EF%BC%8Cvfwprintf) |  [fscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Fscanf%EF%BC%8Cfwscanf)   | [vfscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Vfscanf) [^1] |
| s   | 文字列 | [sprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Sprintf%EF%BC%8Cswprintf)  | [vsprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Vsprintf%EF%BC%8Cvswprintf)  |  [sscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Sscanf%EF%BC%8Cswscanf)  | [vsscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Vsscanf) [^1] |
| sn  | 文字列 (最大長指定) | [snprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Snprintf_%E3%81%A8_snwprintf) [^1] | [vsnprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Vsnprintf%E3%80%81vsnwprintf) [^1] |            |           |
                                                        
:::note
プレフィックス v を持つ printf() 系関数や scanf() 系関数は、引数リストではなく引数リストへのポインタを受け取ります。[可変個数引数](https://qiita.com/ht_deko/items/f275d5da1fcd62d56e93)を利用する関数の中で利用されます。
:::


## 資料

 - [C 言語 / 標準ライブラリ / stdio.h (Wikibooks)](https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E/%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/stdio.h)
 - [z/OS C/C++ ランタイム・ライブラリー・リファレンス stdio.h &#x2014; 標準入出力 (IBM)](https://www.ibm.com/docs/ja/zos/3.1.0?topic=files-stdioh-standard-input-output)
 - [C 言語の標準ヘッダ一覧 stdio.h (C 言語)](http://www.c-lang.org/detail/stdio_h.html)


---

[&#x21E6; インデックスへ](https://qiita.com/ht_deko/items/31f4b37daa97270e2416)


[^1]: C99 で追加された。
[^2]: 関数ではなくマクロで定義される事があります。