Nac*_*ack 2 c pointers binaryfiles
#include<stdio.h>
#include<stdlib.h>
typedef struct{
char cStdName[50];
int nStdNum;
char cStdClass[4];
float dStdAvg;
}student;
student* students;
int cmp(const void* a, const void* b);
void main() {
int num = 0,i=0;
FILE *f;
printf("Number of students:");
scanf("%d", &num);
students = (student*)malloc(num*sizeof(student));
for(i=0;i<num;++i){
student* ptr = students+i*sizeof(student);
printf("Name:");
scanf("%s", ptr->cStdName);
printf("Num");
scanf("%d", &ptr->nStdNum);
printf("Class:");
scanf("%s", ptr->cStdClass);
printf("Grade:");
scanf("%f", &ptr->dStdAvg);
}
f = fopen("bin.bin","wb");
fwrite(&num,sizeof(int),1,f);
fwrite(students,sizeof(student),num,f);
fclose(f);
system("pause");
}
Run Code Online (Sandbox Code Playgroud)
这应该输出学生的数量和二进制文件中的所有结构'数组',它适用于1名学生.但是当我添加> = 2个人时,文件看起来像这样:http: //i.imgur.com/LgL8fUa.png
如果我只添加一个学生,仍然有一些这样的Windows路径无稽之谈:http: //i.imgur.com/s7fm9Uv.png 虽然可以,读取文件的程序会忽略NULL后的所有内容(我的意思是,对于第一个char数组).
我认为问题是在for()循环和指针杂耍的某处,但我不知道在哪里.
student* ptr = students + i * sizeof(student);
Run Code Online (Sandbox Code Playgroud)
在C中,指针算法已包含sizeof(student).你将阅读你的arrray结束.
student* ptr = students + i;
Run Code Online (Sandbox Code Playgroud)
但是,您会注意到访问权限ptr与访问权限相同students[i].
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |