gpt4 book ai didi

c - 文件 IO 似乎没有正确读取

转载 作者:太空狗 更新时间:2023-10-29 15:06:01 25 4
gpt4 key购买 nike

免责声明:这是一项作业。我不要求显式代码。相反,我只寻求足够的帮助,以便我可以理解我的问题并自行纠正。

我正在尝试根据家庭作业重新创建 Unix ar 实用程序。该作业的大部分内容处理 C 中的文件 IO,其他部分处理系统调用等。

在这种情况下,我打算创建一个包含存档中所有文件的简单列表。正如您可能注意到的那样,我还没有走得太远。该计划相对简单:从归档文件中读取每个文件头并仅打印 ar_hdr.ar_name 中保存的值。其余字段将通过 fseek() 跳过,包括文件数据,直到到达另一个文件,此时该过程再次开始。如果到达 EOF,函数将终止。

我对文件 IO 的经验很少,所以我在这个任务上已经处于劣势。我已尽最大努力研究实现目标的正确方法,并且我相信我已尽我所能实现它们。也就是说,我的实现似乎有问题。存档文件中的数据似乎没有被读取,或者至少存储为变量。这是我的代码:

struct ar_hdr
{
char ar_name[16]; /* name */
char ar_date[12]; /* modification time */
char ar_uid[6]; /* user id */
char ar_gid[6]; /* group id */
char ar_mode[8]; /* octal file permissions */
char ar_size[10]; /* size in bytes */
};

void table()
{
FILE *stream;
char str[sizeof(struct ar_hdr)];
struct ar_hdr temp;

stream = fopen("archive.txt", "r");
if (stream == 0)
{
perror("error");
exit(0);
}

while (fgets(str, sizeof(str), stream) != NULL)
{
fscanf(stream, "%[^\t]", temp.ar_name);
printf("%s\n", temp.ar_name);
}
if (feof(stream))
{
// hit end of file
printf("End of file reached\n");
}
else
{
// other error interrupted the read
printf("Error: feed interrupted unexpectedly\n");
}

fclose(stream);
}

在这一点上,我只想能够正确读取数据。完成后,我将努力寻找下一个文件。不过,我想重申我的观点,我不是在要求明确的代码——我需要学习这些东西,而让别人为我提供工作代码是行不通的。

最佳答案

您已经定义了一个名为 strchar 缓冲区来保存您的数据,但是您正在从一个名为 ar_hdr 的单独内存结构中访问它临时。同样,您正在将二进制数据作为字符串读取,这会由于嵌入的空值而中断。

您需要读取二进制数据,然后将 temp 更改为指向 str 的指针,或者使用类似以下内容直接读取到 temp 中:

ret=fread(&temp,sizeof(temp),1,stream);

(看看 doco 是否害怕 - 我的 C 太生锈了,无法确定)。请务必检查并使用返回值。

关于c - 文件 IO 似乎没有正确读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14694802/

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