gpt4 book ai didi

c - 读取一个不存在的文件

转载 作者:行者123 更新时间:2023-12-04 10:36:15 24 4
gpt4 key购买 nike

我有一个小程序可以使用系统调用 - 读取来打印文件的内容。

unsigned char buffer[8];
size_t offset=0;
size_t bytes_read;

int i;

int fd = open(argv[1], O_RDONLY);

do{
bytes_read = read(fd, buffer, sizeof(buffer));
printf("0x%06x : ", offset);

for(i=0; i<bytes_read; ++i)
{
printf("%c ", buffer[i]);
}
printf("\n");
offset = offset + bytes_read;
}while(bytes_read == sizeof(buffer));

现在在运行时我给出了一个不存在的文件名。它打印某种混合了环境变量的数据,最后打印出一个段错误。

这怎么可能?程序打印什么?

谢谢,约翰

最佳答案

它正在打印垃圾,因为 fd 总是会被设置为 -1,这不是传递给 read 的好东西,因为它会反过来除了 return 之外什么都不做-1也是。它会让您的缓冲区保持不变,这意味着它保留着您开始时在那里的任何垃圾。

你可以将整个 do 循环放在类似这样的地方:

if (fd == -1) {
printf ("error here");
} else {
// do loop here
}

关于c - 读取一个不存在的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5049460/

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