gpt4 book ai didi

c - read() 调用后 Printf 打印垃圾。偏移量始终打印为 0

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

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <stdint.h>

int main()
{
int file;
off_t offset;

if((file=open("testfile.txt",O_RDONLY)) < -1)
return 1;

char buffer[19];

if(read(file,buffer,19) != 19) return 1;
fprintf(stdout,"%s\n",buffer);


if(offset = lseek(file,-19,SEEK_END) < 0) return 1;
fprintf(stdout,"%jd\n",(intmax_t)offset);

if(read(file,buffer,19) != 19) return 1;
fprintf(stdout,"%s\n",buffer);

return 0;
}

输出如下:

这是一个测试文件....

0

这是一个测试文件

��

测试文件.txt :

这是一个测试文件 测试 SEEK_END 是如何工作的 这是一个测试文件

我尝试了不同的偏移量格式,例如 %ld、%d,但输出仍然相同。无法弄清楚为什么垃圾出现在第一行和最后一行的末尾。请帮忙。

最佳答案

您需要为行尾字符'\0'留出空间;

所以制作 char buffer[19]; char buffer[20]; 然后添加 buffer[19] = '\0'; - 记住它是从零开始计数的。那么它不应该有垃圾数据。

原因是因为printf不知道字符数组的末尾在哪里。所以它会一直打印直到在垃圾内存中找到一个'\0'。

关于c - read() 调用后 Printf 打印垃圾。偏移量始终打印为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26858567/

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