gpt4 book ai didi

c - fwrite() 是如何工作的

转载 作者:行者123 更新时间:2023-11-30 21:36:34 27 4
gpt4 key购买 nike

我必须使用 fwrite() 而不是 fputc(),但我无法理解它是如何工作的。我尝试使用它,但它以二进制形式写入。这是代码:

while ((c = fgetc(f1)) != EOF) 
{
if (fwrite(&f3, sizeof(f3), 1, f3) == EOF)
{
printf("valore iniziale di errno = %d\n",errno);
perror("errore:");
exit(1);
}
}

f1 是写入一些文本的文件,f3 是我想写入 f1 内容的文件,但我只看到二进制文本。

最佳答案

fwrite“工作原理”

<小时/>

您可以首先查看 fwrite manual 。它的签名是:

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

那么,让我们分解每个论点:

  1. ptr 是数据的源位置(数据所在的位置)。
  2. size 是每个数据元素的大小。 fwrite 每次循环时都会写入 size 字节的 block 。
  3. nmembfwrite 将执行的循环数。
  4. stream 是输出文件的文件描述符 (FILE*)。

因此,考虑到这一点,想象一下:

// our dear string
char *str = "#SO";

// open a bogus file to write
FILE *fp = fopen(foo, "wb");

// call fwrite and store returned value
size_t ret = fwrite(str, 3, 1, fp);

此代码将执行以下操作(除了不编译):从 str 指向的位置开始,它将写入 3 字节fp 1 次指向的文件。但是,如果您这样做:

size_t ret = fwrite(str, 1, 3, fp);

这将告诉 fwrite 在每次迭代时将 1 字节写入文件,并且它将执行 3 迭代。

在您的情况下,您从 f1 读取一个字符并希望将其写入 f3。因此,你应该有这样的东西:

ret = fwrite(&c, sizeof(c), 1, f3);

这将从f1读取二进制字符并将其复制到f3

请注意,这可能不是(也可能不是)fwrite 内部工作的方式。我在这里介绍的是我用来记住其论点的心理模型。如果您实际阅读fwrite源代码,您可能会发现一个非常不同的实现。

示例

<小时/>

因此,从 f1 复制到 f2 的简单程序是:

#include <stdio.h>

int main(void)
{
char c;
FILE *f1 = fopen("foo.txt", "rb");
FILE *f2 = fopen("bar.txt", "wb");
size_t ret;

while((ret = fread(&c, sizeof(c), 1, f1)))
ret = fwrite(&c, sizeof(c), 1, f2);


fclose(f1);
fclose(f2);
return 0;
}

关于c - fwrite() 是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48229901/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com