Бинарные файлы, стек вокруг переменной «paka1» был поврежден - C (СИ)
Формулировка задачи:
Листинг программы
- #include <stdio.h>
- #include <conio.h>
- #include <string.h>
- #include <stdlib.h>
- #pragma pack (show)
- typedef struct DATA_NO_OP{
- char name[31]; // имя, фамилия
- short int age; // возраст, полных лет
- char gender; // пол, мужской, женский
- short int mean; // средний балл успеваемости
- } st1;
- #pragma pack (push)
- #pragma pack (1)
- #pragma pack (show)
- typedef struct DATA_OP{
- char name[31]; // имя, фамилия
- short int age; // возраст, полных лет
- char gender; // пол, мужской, женский
- short int mean; // средний балл успеваемости
- } st2;
- #pragma pack (pop)
- #pragma pack (show)
- void createST1(st1* pak){
- pak->age = 0;
- pak->gender = 'M';
- pak->mean = 0;
- memset(&pak->name,'\0',31);
- strcpy(pak->name,"NAME_SURNAME");
- }
- void createST2(st2* pak){
- pak->age = 0;
- pak->gender = 'W';
- pak->mean = 0;
- memset(&pak->name,'\0',31);
- strcpy(pak->name,"NAME_SURNAME");
- }
- void zapisVfailst1 (st1* pak,FILE* f){
- rewind(f);
- fwrite(&pak,sizeof(struct DATA_NO_OP),1,f);
- rewind(f);
- }
- void zapisVfailst2 (st2* pak,FILE* f){
- rewind(f);
- fwrite(&pak,sizeof(struct DATA_OP),1,f);
- rewind(f);
- }
- void vivodIzfailIconst1(FILE* f){
- st1 *paka1 = (st1*) malloc(sizeof(st1));
- rewind(f);
- fread(&paka1,sizeof(st1),1,f);
- printf("\n\tВывод из файла st1:");
- printf("\n\t %s",paka1->name);
- printf("\n\t %d",paka1->age);
- printf("\n\t %c",paka1->gender);
- printf("\n\t %d",paka1->mean);
- //free(paka1);
- /*rewind(f);
- printf("\n\t_______");*/
- }
- void vivodIzfailIconst2(FILE* f){
- st2 *paka1 = (st2*) malloc(sizeof(st2));
- fread(&paka1,sizeof(st2),1,f);
- printf("\n\tВывод из файла st2:");
- printf("\n\t %s",paka1->name);
- printf("\n\t %d",paka1->age);
- printf("\n\t %c",paka1->gender);
- printf("\n\t %d",paka1->mean);
- //free(paka1);
- //rewind(f);
- }
- int main (){
- FILE *F1,*F2;
- st1 *massNoOp =(st1*) malloc(sizeof(st1));
- st2 *massOp =(st2*) malloc(sizeof(st2));
- createST1(massNoOp);
- printf("\n\t %s , %d ,%c, %d",massNoOp->name,massNoOp->age,massNoOp->gender,massNoOp->mean);
- createST2(massOp);
- printf("\n\t %s , %d ,%c, %d",massOp->name,massOp->age,massOp->gender,massOp->mean);
- F1 = fopen("18_6NOOP.bin","wb+");
- F2 = fopen("18_6OP.bin","wb+");
- zapisVfailst1(massNoOp,F1);
- zapisVfailst2(massOp,F2);
- vivodIzfailIconst1(F1);
- vivodIzfailIconst2(F2);
- fclose(F1);
- fclose(F2);
- free(massNoOp);
- free(massOp);
- printf ("\t\nsizeof (struct st1) = %d\n", sizeof (struct DATA_NO_OP));
- printf ("\t\nsizeof (struct st2) = %d\n", sizeof (struct DATA_OP));
- printf("\n\t");
- system("pause");
- return 0;
- }
Решение задачи: «Бинарные файлы, стек вокруг переменной «paka1» был поврежден»
textual
Листинг программы
- st1 *paka1 = (st1*) malloc(sizeof(st1));
- fread(&paka1,sizeof(st1),1,f);
Объяснение кода листинга программы
paka1
- инициализируется как указатель на структуруst1
st1
- структура, на которую указываетpaka1
f
- файловый дескриптор, через который происходит чтение из файлаsizeof(st1)
- размер структурыst1
в байтах1
- количество элементов, которые необходимо прочитать из файла
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д