C 试图从文件打印结构的动态数组
因此,基本上,我正在尝试编写一个程序:C 试图从文件打印结构的动态数组,c,C,因此,基本上,我正在尝试编写一个程序: 读取未知大小的结构的动态数组 将其写入文件 在屏幕上打印 所有这些都需要使用不同的函数和结构的动态数组。这是我正在编写的代码;打印功能无法正常工作,似乎在所有操作过程中数据丢失:/能否有人告诉我如何修复此问题 #include <stdio.h> #include <stdlib.h> #include <string.h> #define FILE_CARS "cars.txt" typedef
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FILE_CARS "cars.txt"
typedef struct car
{
long int id;
char name[100];
}Car;
void reading(Car *vec){
printf("ID: ");
scanf("%d", &vec->id);
printf("Name: ");
scanf(" %[^\n]", vec->name);
FILE *fab = fopen(FILE_CARS, "ab+");
fwrite(&vec, sizeof(Car), 1, fab);
fclose(fab);
}
void printing(Car *vec){
//vec = (Car*) malloc(sizeof(Car));
FILE *fr = fopen(FILE_CARS, "rb");
while(fread(vec, sizeof(Car), 1, fr)){
printf("\nID: %d\n", vec->id);
printf("Name: %s\n", vec->name);
}
fclose(fr);
}
int main(){
int op;
Car *vec = (Car*) malloc (sizeof(Car));
do{
scanf("%d", &op);
switch(op){
case 1:
reading(vec);
break;
case 2:
printing(vec);
break;
case 3:
printf("End of program");
break;
default:
printf("invalid option");
}
}while(op != 3);
}
#包括
#包括
#包括
#定义文件_CARS“CARS.txt”
结构车
{
长int-id;
字符名[100];
}汽车;
无效读数(Car*vec){
printf(“ID:”);
scanf(“%d”和&vec->id);
printf(“名称:”);
scanf(“%[^\n]”,vec->name);
FILE*fab=fopen(FILE_CARS,“ab+”);
fwrite&vec,sizeof(Car),1,fab;
fclose(fab);
}
作废打印(Car*vec){
//vec=(Car*)malloc(sizeof(Car));
文件*fr=fopen(文件“rb”);
while(fread(vec,sizeof(Car),1,fr)){
printf(“\nID:%d\n”,vec->id);
printf(“名称:%s\n”,向量->名称);
}
fclose(fr);
}
int main(){
int op;
Car*vec=(Car*)malloc(sizeof(Car));
做{
scanf(“%d”和&op);
开关(op){
案例1:
阅读(vec);
打破
案例2:
印刷(vec);
打破
案例3:
printf(“课程结束”);
打破
违约:
printf(“无效期权”);
}
}而(op!=3);
}
在行中
fwrite(&vec, sizeof(Car), 1, fab);
您正在将指针写入文件,这将是无用的。
这也是危险的,因为sizeof(Car)
通常大于指针,并且会发生越界读取
请使用不带和的此行:
fwrite(vec, sizeof(Car), 1, fab);
你正在写指针。。。vec
不是指针吗?i、 e.&vec
将是指向指针的指针(即相当于原型中的Car**
,这是错误的),并且应该抛出编译器错误。@rykervec
是指向Car
数据的指针&vec
是指向Car*
数据的指针。两者都是指针。fwrite
的第一个参数是const void*
,它接受任何指针。因此不会抛出编译器错误fwrite
将写入传递的指向文件的指针所指向的内容。