【发布时间】:2018-11-13 18:12:35
【问题描述】:
我正在尝试将结构写入文件,然后将结构读取到动态分配的内存。 如果这个算法甚至可以工作,我不确定 fread 函数......它是否能够读取以这种方式编写的文件中的所有结构并将其存储到 *ptr,以便我可以从内存中访问它? 有更好的方法吗?
typedef struct num {
int num1;
int num2;
}NR;
void write() {
int successfullywritten;
FILE *f;
struct num nr;
f = fopen("dat.txt", "a");
printf("Enter first number\n");
scanf("%d", &nr.num1);
printf("Enter second number\n");
scanf("%d", &nr.num2);
successfullywritten=fwrite(&nr, sizeof num, 1, f);
printf("Succesfully written: %d\n", successfullywritten);
fclose(f);
}
void read() {
int size, entrys,i,successfullyread;
FILE *f;
f = fopen("dat.txt", "r");
struct num *ptr;
fseek(f, 0L, SEEK_END);
size = ftell(f);
printf("\nSize of file dat.txt: %d\n", size);
entrys = size / sizeof(num);
ptr = (num*)malloc(entrys * sizeof(num));
successfullyread=fread(ptr, sizeof(num), entrys, f);
printf("sucessfully Read: %d\n", successfullyread);
for (i = 0;i < entrys; i++) {
/*fread((ptr+i), sizeof(ptr), 1, f);*/
printf("%d ", (*(ptr)).num1);
printf("%d\n", (*(ptr)).num2);
}
printf("\n");printf("\n");
fclose(f);
}
int main() {
int n;
while(1){
printf("Chooose action:\n1) write to file\n2) read from file:\n");
scanf("%d", &n);
switch (n) {
case 1:
write();
break;
case 2:
read();
break;
}
}
return 0;
}
【问题讨论】:
-
其实不是.txt而是.dat
-
您对将结构的成员值存储在文件中感兴趣,还是对存储结构本身感兴趣?无论哪种方式,list 方法都可以更好地满足您的兴趣。
-
理想情况下,仅将当前处理所需的内容存储在内存中,除非您知道以后需要它。你有没有函数 return 一个指示任何错误的值,而不是 print 那个。
标签: c structure fwrite allocation fread