| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 681 人关注过本帖
标题:读取文件时程序报错,调试了好久不知道如何解决
只看楼主 加入收藏
忘了_这一切
Rank: 3Rank: 3
来 自:星星
等 级:论坛游侠
威 望:1
帖 子:41
专家分:145
注 册:2014-4-25
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:14 
读取文件时程序报错,调试了好久不知道如何解决
程序代码:
#ifndef STUDENT_SYSTEM_H
#define STUDENT_SYSTEM_H

void Studentmassage_ShowMenu();
void AddItem();
void Display();
void Sort();
void Find();
void RemoveItem();
void t();
void ModifyItem();
struct  Student 
{ 
    char name[20]; 
    char Id[20];
    char sex[4];
    int age;
    int Cnum;       
    int Mnum;       
    int Enum;       
    int math;
    int sum;        
    int average;
};
typedef struct load
{
    char user_name[50];
    char password[50];
}mima;

void build_new();
int load_user();
int load_mima();
void write_file(struct Student *s);
void read_file(void);
#endif


程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "student_system.h"

void write_file(struct Student *s)
{
    FILE *fp_1;
    int mark=1;
    if((fp_1=fopen("list_student.txt","ab+"))==NULL)
        printf("打开文件失败");
    else
        while(s->name[0]!=NULL)
        {
            fwrite(&mark,sizeof(int),1,fp_1);
            fwrite(s,sizeof(Student),1,fp_1);
            printf("存储数据成功");
            system("pause");
            s++;
        }
        fclose(fp_1);
}


void read_file()
{
    FILE *fp_2;
    int mark;
    struct Student *s;
    s=(Student *)malloc(sizeof Student);
    if((fp_2=fopen("list_student.txt","rb"))==NULL)
        printf("打开文件失败");
    else
        while(fread(&mark,sizeof(int),1,fp_2)==1)
        {
            fflush(stdout);
            fread(s,sizeof(Student),1,fp_2);
            printf("读取数据成功\n");
            printf("%6s%6s%6s%6s%6s%6s%6s%6s%6s%6s\n","姓名","学号","性别","年龄","成绩1","成绩2","成绩3","成绩4","总成绩","平均成绩");
            printf("%6s%6s%6s%6d%6d%6d%6d%6d%6d%6d\n",s->name,s->Id,s->sex,s->age,s->Cnum,s->Enum,s->Mnum,s->math,s->sum,s->average);
            s++;
        }
        /*system("pause");*/
        free(s);
        fclose(fp_2);

}

只附上相关的代码
搜索更多相关主题的帖子: 如何 
2014-05-26 16:17
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:0 
报的什么错,贴出来

我不是砖家,要努力成为砖家。
2014-05-26 16:19
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
看看哪句代码出错

DO IT YOURSELF !
2014-05-26 16:21
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:5 
while(s->name[0]!=NULL)   //s->name[0]神马!!!
        {
            fwrite(&mark,sizeof(int),1,fp_1);
            fwrite(s,sizeof(Student),1,fp_1);
            printf("存储数据成功");
            system("pause");
            s++;
        }

总有那身价贱的人给作业贴回复完整的代码
2014-05-26 16:35
忘了_这一切
Rank: 3Rank: 3
来 自:星星
等 级:论坛游侠
威 望:1
帖 子:41
专家分:145
注 册:2014-4-25
收藏
得分:0 
回复 4 楼 embed_xuel
判断是否存储数据的条件啊,如果输入了数据则s->name就一定不会是空
2014-05-26 16:53
忘了_这一切
Rank: 3Rank: 3
来 自:星星
等 级:论坛游侠
威 望:1
帖 子:41
专家分:145
注 册:2014-4-25
收藏
得分:0 
无语,图片发不出来。只能摘抄了诊断信息

HEAP[student_system.exe]: Invalid address specified to RtlValidateHeap( 00360000, 00364438 )
Windows 已在 student_system.exe 中触发一个断点。

其原因可能是堆被损坏,这说明 student_system.exe 中或它所加载的任何 DLL 中有 Bug。

原因也可能是用户在 student_system.exe 具有焦点时按下了 F12。

输出窗口可能提供了更多诊断信息。
2014-05-26 16:56
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:5 
以下是引用忘了_这一切在2014-5-26 16:53:19的发言:

判断是否存储数据的条件啊,如果输入了数据则s->name就一定不会是空

s->name[0]与s->name是一个东西吗?

总有那身价贱的人给作业贴回复完整的代码
2014-05-26 16:58
忘了_这一切
Rank: 3Rank: 3
来 自:星星
等 级:论坛游侠
威 望:1
帖 子:41
专家分:145
注 册:2014-4-25
收藏
得分:0 
回复 3 楼 wp231957
只要是选择执行void read_file()这个函数,程序就直接崩溃了,问题很明显就是
程序代码:
while(fread(&mark,sizeof(int),1,fp_2)==1)
        {
            fflush(stdout);
            fread(s,sizeof(Student),1,fp_2);
            printf("读取数据成功\n");
            printf("%6s%6s%6s%6s%6s%6s%6s%6s%6s%6s\n","姓名","学号","性别","年龄","成绩1","成绩2","成绩3","成绩4","总成绩","平均成绩");
            printf("%6s%6s%6s%6d%6d%6d%6d%6d%6d%6d\n",s->name,s->Id,s->sex,s->age,s->Cnum,s->Enum,s->Mnum,s->math,s->sum,s->average);
            s++;

这里的代码出问题了。其中s++可能存在指针越界的错误
我写的这段程序的目的是一次性读取所有以追加模式保存在文件中的数据
2014-05-26 17:03
忘了_这一切
Rank: 3Rank: 3
来 自:星星
等 级:论坛游侠
威 望:1
帖 子:41
专家分:145
注 册:2014-4-25
收藏
得分:0 
回复 7 楼 embed_xuel
额,s->name是一个地址无法作为判断条件啊,所有我用s->name[0](代表一个字符)是否为空来判断的。我没想到更好的判断条件,就只能这么做了
2014-05-26 17:06
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
这个不对吧

 s=(Student *)malloc(sizeof Student);

貌似一般都是这样的
s=(Student *)malloc(sizeof(Student)*数值);

DO IT YOURSELF !
2014-05-26 17:07
快速回复:读取文件时程序报错,调试了好久不知道如何解决
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018483 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved