gpt4 book ai didi

c - fwrite 在 linux 中打印不需要的 NUL

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

有人问过这个问题的各种版本,但不幸的是,没有一个能解释我在 fwrite 中看到的行为。

我正在尝试将文件 (fread) 读入缓冲区,然后将缓冲区 (fwrite) 写入另一个文件。 fwrite 写入的字节数符合预期,但是当我打印出文件时,我在末尾看到一个“NUL”字符,而原始文件中不存在该字符。

这里是代码的相关部分,

fps = fopen(source, "rb");
fpd = fopen(destination, "w+b");

// Get source file size
fseek(fps,0L,SEEK_END);
filesize = ftell(fps)+1;
fseek(fps,0L,SEEK_SET); //Reset file pointer

char *buffer = malloc(filesize * sizeof *buffer);
fread(buffer,1,filesize,fps);
int dsize = fwrite(buffer,1,filesize,fpd);

这里是按每个字符打印“目标”文件的代码。

int c;
while ((c = fgetc(fpd)) != EOF) {
printf("Character -> %d\n", c);
}
printf("Character EOF-> %d\n", c);

我相信这与“缓冲区”的定义方式有关,但我真的束手无策。

非常感谢您的帮助!

最佳答案

这个

fseek(fps,0L,SEEK_END);

不会将当前位置放在文件的最后一个字节。它将当前位置 beyond 文件的最后一个字节(紧接着最后一个字节之后)。这意味着文件大小为

filesize = ftell(fps);

你不应该给它加 1。您尝试读取一个额外的字节(实际上不存在)是在目标文件中产生该额外字符的原因。

关于c - fwrite 在 linux 中打印不需要的 NUL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29545043/

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