69,369
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#define LEN 41
#define MAX 11
#define SIZE 10
typedef struct info {
char fname[LEN];
char lname[LEN];
int age;
char gender[MAX];
char post[LEN];
bool state;
}INFO;
void processdata(INFO *, int, FILE *);
int main(void)
{
INFO data[SIZE]; //这里data[SIZE]已初始化,具体内容就不敲了,请见谅
INFO * pp = &data[0];
int index;
FILE * fp;
if((fp = fopen("info.dat", "wb+")) == NULL)
{
fprintf(stderr, "Error opening file.");
exit(EXIT_FAILURE);
}
for(index = 0; index < SIZE; index++)
fwrite(pp[index], sizeof (INFO),1, fp);
processdata(pp, SIZE, fp);
fclose(fp);
return 0;
}
void processdata(INFO * pt, int n, FILE * fp)
{
int index;
puts("Data written:");
for(index = 0; index < n; index++)
{
fread(pt[index], sizeof(INFO), 1, fp);
if(pt[index]->state == true)
printf("\nFirst name: %s Last name: %s Age: %d Gender: %s Post: %s",
pt[index]->fname, pt[index]->lname, pt[index]->age, pt[index]->gender, pt[index]->post);
}
}
fwrite( &pp[index], sizeof (INFO),1, fp);
[/quote]
谢谢,max_min_版主,不过我向KenZhang1031请教的3楼的问题我也想同样向你请教。[/quote]
pp[index]是取了里面的内容的不是指针!
fwrite( &pp[index], sizeof (INFO),1, fp);
[/quote]
谢谢,max_min_版主,不过我向KenZhang1031请教的3楼的问题我也想同样向你请教。[/quote]
pp[index]是取了里面的内容的不是指针![/quote]
是的,后来想想,用普通数组的指针所引用的也的确是数组元素本身而非其指针。谢谢!谢谢,我试了,还真行!但是 INFO * pp不是已经就等于&data[0]了吗?它本来就是指针的啊,怎么还要再用&pp[index]呢?而且函数processdata(INFO * pp, int n, FILE *fp)里面的参数INFO *pp也明显就是指针啊,怎么也还要采取&pt[index]的形式,fread()才认呢?请指教!
[quote=引用 1 楼 KenZhang1031 的回复:] fread和fwrite的函数原型第一个参数都是空指针,所以任何指针类型都可以当第一个参数,你的pp[index]和pt[index]都不是指针,而是INFO的结构,改成&pp[index]和&pt[index]试试。
fwrite( &pp[index], sizeof (INFO),1, fp);
[/quote]
谢谢,max_min_版主,不过我向KenZhang1031请教的3楼的问题我也想同样向你请教。fread和fwrite的函数原型第一个参数都是空指针,所以任何指针类型都可以当第一个参数,你的pp[index]和pt[index]都不是指针,而是INFO的结构,改成&pp[index]和&pt[index]试试。
fread和fwrite的函数原型第一个参数都是空指针,所以任何指针类型都可以当第一个参数,你的pp[index]和pt[index]都不是指针,而是INFO的结构,改成&pp[index]和&pt[index]试试。
fwrite( &pp[index], sizeof (INFO),1, fp);