C fread()不';t工作,但fwrite()工作?

C fread()不';t工作,但fwrite()工作?,c,file,file-io,fwrite,fread,C,File,File Io,Fwrite,Fread,为什么fread()不起作用,但fwrite()起作用? 如果我将fwrite()放入注释中,并从注释中取出fread(),则输出文件的大小为0字节大小。。。但是如果fwrite()没有注释,则输出文件的大小为64字节 怎么了 #include <stdio.h> #include <stdlib.h> int main() { FILE *input = fopen( "01.wav", "rb"); if(input == NULL)

为什么
fread()
不起作用,但
fwrite()
起作用?

如果我将
fwrite()
放入注释中,并从注释中取出
fread()
,则输出文件的大小为
0字节
大小。。。但是如果
fwrite()
没有注释,则输出文件的大小为
64字节

怎么了

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *input = fopen( "01.wav", "rb");

        if(input == NULL)
        {
            printf("Unable to open wave file (input)\n");
            exit(EXIT_FAILURE);
        }

    FILE *output = fopen( "01_out.wav", "wb");


    //fread(output, sizeof(char), 64, input);
    fwrite(input, sizeof(char), 64, output);

    fclose(input);
    fclose(output);

    return 0;
}
#包括
#包括
int main()
{
文件*input=fopen(“01.wav”、“rb”);
如果(输入==NULL)
{
printf(“无法打开波形文件(输入)\n”);
退出(退出失败);
}
文件*output=fopen(“01_out.wav”、“wb”);
//fread(输出,sizeof(char),64,输入);
fwrite(输入,sizeof(char),64,输出);
fclose(输入);
fclose(输出);
返回0;
}

您应该读取输入文件,然后写入输出文件

char buf[64];
fread(buf, 1, sizeof(buf), input);
fwrite(buf, 1, sizeof(buf), output);

您的代码应该检查
fread
fwrite
的返回值是否有错误。

您应该读取输入文件,然后写入输出文件

char buf[64];
fread(buf, 1, sizeof(buf), input);
fwrite(buf, 1, sizeof(buf), output);
fread(output, sizeof(char), 64, input);
代码应检查
fread
fwrite
的返回值是否存在错误

fread(output, sizeof(char), 64, input);
此行将从输入文件中读取64个字节,并将这些64个字节存储在
output
指向的内存中。它不会向输出文件写入任何内容。由于
output
是一个文件指针,而不是指向数组的指针,因此像这样使用它是没有意义的

fwrite(input, sizeof(char), 64, output);
此行将从
input
指向的内存中读取64个字节,并将它们写入输出文件。它不会从输入文件中读取任何内容。同样,这也不能满足您的需要,因为
input
指向的内存只包含一个
文件
对象,而不是输入文件的内容

此行将从输入文件中读取64个字节,并将这些64个字节存储在
output
指向的内存中。它不会向输出文件写入任何内容。由于
output
是一个文件指针,而不是指向数组的指针,因此像这样使用它是没有意义的

fwrite(input, sizeof(char), 64, output);

此行将从
input
指向的内存中读取64个字节,并将它们写入输出文件。它不会从输入文件中读取任何内容。同样,这也不能满足您的需要,因为
input
指向的内存只包含一个
文件
对象,而不是输入文件的内容。

sizeof(char)
1
。除了读取输入文件和写入输出文件之外,缓冲区在哪里?@user315052:噢,我忘了。。多么愚蠢的错误啊!。。。谢谢你的提醒。@CarlNorum,我知道。我想复制1*64字节,没关系
sizeof(char)
看起来很奇怪,因为它总是可以被
1
或语义更好的东西替换。请查看@user315052的答案以获得一个很好的示例。
sizeof(char)
1
。除了读取输入文件和写入输出文件之外,缓冲区在哪里?@user315052:哦,我忘了。。多么愚蠢的错误啊!。。。谢谢你的提醒。@CarlNorum,我知道。我想复制1*64字节,没关系
sizeof(char)
看起来很奇怪,因为它总是可以被
1
或语义更好的东西替换。请查看@user315052的答案以获得一个很好的示例。这两行代码一起工作
fread()
行正在将输入读取到缓冲区中
fwrite()
正在将缓冲区的内容写入输出。您的
fwrite
从未像以前那样“工作”。您传入了
input
作为第一个参数,但是
fwrite
没有读取
input
文件流,它将
input
视为指向要写入的数据的指针
input
output
是指向内存中数据结构的指针,这些数据结构描述了如何从文件系统中读取内容,以及如何将内容写入各自的文件。您的
fwrite
正在写入此数据结构,而不是文件系统上输入文件的内容。这两行代码一起工作
fread()
行正在将输入读取到缓冲区中
fwrite()
正在将缓冲区的内容写入输出。您的
fwrite
从未像以前那样“工作”。您传入了
input
作为第一个参数,但是
fwrite
没有读取
input
文件流,它将
input
视为指向要写入的数据的指针
input
output
是指向内存中数据结构的指针,这些数据结构描述了如何从文件系统中读取内容,以及如何将内容写入各自的文件。您的
fwrite
正在写入此数据结构,而不是文件系统上输入文件的内容。