gpt4 book ai didi

c - fwrite 创建一个比输入文件大的输出文件

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:41 25 4
gpt4 key购买 nike

我想将一个文件按字节读入一个数组,然后将数组的数据倒序写入在一个新文件中(程序将文件名置于命令行参数之上)。用txt文件试过它有效,但如果我在 jpg 文件上尝试它,新文件比原始文件大!保存在 long size; 中的确定文件大小对于 jpg 文件和写入循环也是正确的get size-time executed writing one char(字符是一个字节大,我是对的?)。有谁知道输出文件如何变得大于 size*byte?

我觉得这不合逻辑!

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

int main(int argc,char* argv[])
{

FILE *file;
char *buffer;
long size;
char filename[32];

if(argc>1)
{
//determine file size
file=fopen(argv[1],"r");
fseek(file,0,SEEK_END);
size=ftell(file);
rewind(file);
if(size>33554432) //32MB
{
fclose(file);
return 0;
}

//create buffer and read file content
buffer=malloc(33554432);
fread(buffer,1,size,file);
fclose(file);

//create new file name and write new file
strcpy(filename,argv[1]);
strcat(filename,"_");
file=fopen(filename,"w");
{
long i;
for(i=size-1;i>=0;i--)
{
fputc(buffer[i],file);
}
}
fclose(file);
free(buffer);

}
return 0;
}

最佳答案

您收到的评论暗示了一些事情:与其他一些系统相比,换行符 \n 在 Windows 的文本模式下的工作方式不同。

fputc('\n', file) 在 Windows 上实际上写入两个字节,如果 file 以文本模式“w”打开,就好像你做了 fwrite("\r\n", 1, 2, 文件).这意味着对于 fread 读取的任何 \n 字节,您要写回两个字节。

如果您想写回二进制数据,您需要使用 "wb" 模式打开您的输出文件到 fopen()。您还需要打开它以二进制模式读取,"rb"

关于c - fwrite 创建一个比输入文件大的输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24716432/

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