gpt4 book ai didi

C: 指针混淆

转载 作者:行者123 更新时间:2023-12-04 11:53:49 25 4
gpt4 key购买 nike

#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");
}

这应该在二进制文件中输出学生人数和所有结构“数组”,并且它适用于 1 名学生。但是当我添加 >=2 人时,文件如下所示: http://i.imgur.com/LgL8fUa.png

如果我只添加 1 个学生,仍然有一些 Windows 路径废话: http://i.imgur.com/s7fm9Uv.png不过没关系,读取文件的程序会忽略 NULL 之后的所有内容(我的意思是,对于第一个字符数组)。

我认为问题出在 for() 循环中的某处和指针变戏法,但我不知道是哪里。

最佳答案

student* ptr = students + i * sizeof(student);

在 C 中,指针算法已经包含了 sizeof(student)。您将阅读数组末尾的内容。

student* ptr = students + i;

但是,您会注意到访问 ptr 与访问 students[i] 是一样的。

关于C: 指针混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15663029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com