# std::fwrite

< cpp‎ | io‎ | c

定义于头文件 `<cstdio>` |  |
std::size_t fwrite( const void* buffer, std::size_t size, std::size_t count, std::FILE* stream ); |  |

写 `count` 个来自给定数组 `buffer` 的对象到输出流`stream`。如同转译每个对象为 unsigned char 数组，并对每个对象调用 `size` 次 std::fputc 以将那些 unsigned char 按顺序写入 `stream` 一般写入。文件位置指示器前进写入的字节数。

若对象不可平凡复制 (TriviallyCopyable) ，则行为未定义。

若出现错误，则文件位置指示器的结果值不确定。

### 参数

buffer | - | 指向数组中要被写入的首个对象的指针
size | - | 每个对象的大小
count | - | 要被写入的对象数
stream | - | 指向输出流的指针

### 返回值

成功写入的对象数，若错误发生则可能小于 `count` 。

若 `size` 或 `count` 为零，则 `fwrite` 返回零并不进行其他行动。

### 示例

    #include <cstdio>
    #include <vector>
    #include <array>

    int main ()
    {
        // 写缓冲区到文件
        if(std::FILE* f1 = std::fopen("file.bin", "wb")) {
            std::array<int, 3> v = {42, -1, 7}; // std::array 的底层存储为数组
            std::fwrite(v.data(), sizeof v[0], v.size(), f1);
            std::fclose(f1);
        }

        // 读取同一数据并打印它到标准输出
        if(std::FILE *f2 = std::fopen("file.bin", "rb")) {
            std::vector<int> rbuf(10); // std::vector 的底层存储亦为数组
            std::size_t sz = std::fread(rbuf.data(), sizeof rbuf[0], rbuf.size(), f2);
            std::fclose(f2);
            for(std::size_t n = 0; n < sz; ++n) {
                std::printf("%d\n", rbuf[n]);
            }
        }
    }

输出：

    42
    -1
    7

### 参阅

printf fprintf sprintf snprintf (C++11) | 打印有格式输出到 stdout、文件流或缓冲区 (函数)
fputs | 写字符串到文件流 (函数)
fread | 从文件读取 (函数)