文件IO似乎没有正确读取
免责声明:这是一项任务.我不是要求明确的代码.相反,我只是要求足够的帮助,我可以理解我的问题,并自己纠正.
我正在尝试根据家庭作业重新创建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("%sn",temp.ar_name); } if (feof(stream)) { // hit end of file printf("End of file reachedn"); } else { // other error interrupted the read printf("Error: feed interrupted unexpectedlyn"); } fclose(stream); } 此时,我只希望能够正确读取数据.在完成之后,我将继续寻找下一个文件.但是,我想重申一下我的观点,即我不是要求明确的代码 – 我需要学习这些东西并且有人向我提供工作代码不会那样做. 解决方法
您已经定义了一个名为str的char缓冲区来保存您的数据,但是您正在从名为temp的单独内存ar_hdr结构中访问它.同样,您正在读取二进制数据作为字符串,因为嵌入的空值而会中断.
您需要读取二进制数据并将temp更改为指向str的指针或使用以下内容直接读入temp: ret=fread(&temp,sizeof(temp),1,stream); (看看doco的恐惧 – 我的C太生锈了,无法确定).确保检查并使用返回值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |