【发布时间】:2018-03-12 19:54:14
【问题描述】:
我有这种结构:
typedef struct {
char a[MAX];
char b[MAX];
int c;
} mys;
还有这个功能:
mys* search_m(FILE *fp, int m)
{
mys* s;
s=(mys *)malloc(sizeof(mys));
if(s){
for(int i=0;i<m;i++)
fread(s,sizeof(mys),1,fp);
}else{
printf("Error during allocation\n");
}
return s;
}
void search_s(FILE *fp, char *c)
{
mys s;
int count=0;
while(fread(&s,sizeof(mys),1,fp)==1){
if(strcmp(s.b,c)==0){
show_s(s,count);
}
count++;
}
return;
}
这是我的程序的一部分。在输入过程中(当我在我的文件上写入数据时)我没有任何问题(使用 fread)但我在读取它时遇到了一些问题。
我的函数 search_s 每次调用它时都会执行并查找值,但是 search_m 函数似乎无法读取我的文件中的 anby 数据,因为这与我在 search_s 上所做的几乎相同,我不知道我的错误在哪里。
在我调用 seach_m 时,我会这样做:
s=*search_ID(f_ptr,m);
show_s(s,m);
我认为问题不是主要问题,因为 search_m 函数中的 fread 没有加载任何数据(它在第一次尝试时停止)。
我的错误在哪里?我以为没关系 PS 在调用此函数之前,我打开文件并检查错误,然后关闭文件。
编辑: 我用这个打开文件:
f_ptr=fopen(argv[1],"rb");
(如果我只使用“r”,它也不起作用) argv[1] 是我的文件名
PS m 是我要读取的文件中元素的编号。 (我每次阅读一个块,直到我没有得到 m-esimo 元素)
我的文件只包含该类型的结构。
【问题讨论】:
-
你是如何打开你的文件的?你用的是同一个手柄吗?我们需要在这里调用上下文。
-
search_m()函数应该做什么?阅读并返回多个还是只返回一个? -
@JohnnyMopp 假设在文件中找到一个结构体,其 b 参数等于传递给 c 的 char 字符串并打印出来
-
@Ofey 听起来这就是
search_s()函数。问题:您是否在其他地方阅读该文件?是否需要rewind该文件才能再次搜索。 -
如果您希望您的代码可移植地工作并且独立于字节顺序、填充等,请考虑使用序列化库,例如我自己的 (github.com/Erlkoenig90/uSer)。如果格式不固定,其他几个也是合适的。