diff --git a/reference/cstdio.md b/reference/cstdio.md index 297863cfb8..5510092ecd 100644 --- a/reference/cstdio.md +++ b/reference/cstdio.md @@ -55,7 +55,7 @@ | [`fputc`](/reference/cstdio/fputc.md) | ファイルに1文字出力する | | | [`fputs`](/reference/cstdio/fputs.md) | ファイルにN文字出力する | | | [`fread`](/reference/cstdio/fread.md) | ファイルからN文字読み込む | | -| [`fwrite`](/reference/cstdio/fwrite.md.nolink) | ファイルにN文字書き込む | | +| [`fwrite`](/reference/cstdio/fwrite.md) | ファイルにN文字書き込む | | | [`fgetpos`](/reference/cstdio/fgetpos.md.nolink) | ファイルの現在位置を取得する | | | [`fseek`](/reference/cstdio/fseek.md.nolink) | ファイルの現在位置を移動する | | | [`fsetpos`](/reference/cstdio/fsetpos.md.nolink) | ファイルの現在位置を設定する | | diff --git a/reference/cstdio/fgets.md b/reference/cstdio/fgets.md index 459603dd13..354af131a3 100644 --- a/reference/cstdio/fgets.md +++ b/reference/cstdio/fgets.md @@ -16,6 +16,11 @@ namespace std { また、改行にたどり着くとそこで読み込みを終了する(末尾に改行文字を含める)。 +## 要件 +- `str`は有効なポインタであること。 +- `stream`は有効なファイルストリームであること。 +- `str`が指すメモリ領域と`stream`が指すファイルストリームの内部バッファが重複していないこと。 + ## 戻り値 成功すれば読み込まれた文字列を、そうでなければ`NULL`を返す。 diff --git a/reference/cstdio/fputs.md b/reference/cstdio/fputs.md index c00edfd847..7d79856ae2 100644 --- a/reference/cstdio/fputs.md +++ b/reference/cstdio/fputs.md @@ -12,6 +12,11 @@ namespace std { ## 概要 ファイルに渡された文字列を出力する。 +## 要件 +- `str`は有効なポインタであること。 +- `stream`は有効なファイルストリームであること。 +- `str`が指すメモリ領域と`stream`が指すファイルストリームの内部バッファが重複していないこと。 + ## 戻り値 正常終了した場合は`0`を、そうでなければ[`EOF`](/reference/cstdio/eof.md)を返す。 diff --git a/reference/cstdio/fread.md b/reference/cstdio/fread.md index a2918cf229..116b601c9b 100644 --- a/reference/cstdio/fread.md +++ b/reference/cstdio/fread.md @@ -17,6 +17,7 @@ namespace std { ## 要件 - `buffer`は有効なポインタであること。 - `stream`は有効なファイルストリームであること。 +- `buffer`が指すメモリ領域と`stream`が指すファイルストリームの内部バッファが重複していないこと。 ## 戻り値 正常に読み込むことのできた項目の数を返す。 diff --git a/reference/cstdio/fwrite.md b/reference/cstdio/fwrite.md new file mode 100644 index 0000000000..c21f708aab --- /dev/null +++ b/reference/cstdio/fwrite.md @@ -0,0 +1,76 @@ +# fwrite +* cstdio[meta header] +* std[meta namespace] +* function[meta id-type] + +```cpp +namespace std { + size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream); +} +``` + +## 概要 +ストリームに`count`個の`size`バイトの要素を書き込む。 + +ストリーム内の位置は、書き込まれたバイトだけ進む。 + +書き込み時にエラーが発生した場合、ストリーム内の位置は不定である。 + +また、書き込みには内部的に[`fputc`](/reference/cstdio/fputc.md)を使用する。 + +## 要件 +- `buffer`は有効なポインタであること。 +- `stream`は有効なファイルストリームであること。 +- `buffer`が指すメモリ領域と`stream`が指すファイルストリームの内部バッファが重複していないこと。 + +## 戻り値 +正常に書き込むことのできた要素の数を返す。 + +## 効果 +`buffer`が指すメモリから`count`個の`size`バイトの要素を`stream`に書き込む。 + +書き込みエラーが生じなければ、書き込むデータの大きさは`count * size`バイトである。 + +## 例 +```cpp example +#include + +int main() { + std::FILE *file = std::fopen("output.txt", "w"); + if (!file) { + std::perror("ファイルを開けませんでした"); + return 1; + } + + const char data[] = "Hello, World!\n"; + /* + 厳密には、sizeof(char)は1バイトであることが保証されているため、 + sizeof(data) - 1は、文字列の長さ(ヌル終端文字を除く)と等しくなる。 + */ + std::size_t count = std::fwrite(data, sizeof(char), sizeof(data) - 1, file); + std::printf("書き込んだデータの長さ: %zu\n", count); + + std::fclose(file); + return 0; +} +``` +* std::fwrite[color ff0000] +* std::fopen[link /reference/cstdio/fopen.md] +* std::fclose[link /reference/cstdio/fclose.md] +* std::perror[link /reference/cstdio/perror.md.nolink] +* std::printf[link /reference/cstdio/printf.md] + +### 出力例 +``` +書き込んだデータの長さ: 13 +``` + +### ファイル出力(output.txt) +``` +Hello, World! +``` + +## 処理系 +- [Clang](/implementation.md#clang): ?? +- [GCC](/implementation.md#gcc): ?? +- [Visual C++](/implementation.md#visual_cpp): ??