大家帮看看这个程序为什么写入时候,出现异常的指针
大家帮看看这个程序为什么写入时候,出现错误的指针
代码是这样的:
// test8.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
#define MAX_SIZE 99
struct role
{
char name[MAX_SIZE];
int life;
int level;
};
int _tmain(int argc, _TCHAR* argv[])
{
int x;
cout<<"请输入要创建几个角色"<<endl;
cin>>x;
role *pwRole = new role[x];
role *prRole = new role[x];
for(int i = 0; i < x;i ++)
{
cout<<"请输入第";
cout<<(i+1);
cout<<"个人的姓名:"<<endl;
cin>>pwRole[i].name;
cout<<"请输入第";
cout<<(i+1);
cout<<"个人的生命:"<<endl;
cin>>pwRole[i].life;
cout<<"请输入第";
cout<<(i+1);
cout<<"个人的等级:"<<endl;
cin>>pwRole[i].level;
}
for(int i = 0; i < x;i ++)
{
cout<<pwRole[i].name<<endl;
cout<<pwRole[i].life<<endl;
cout<<pwRole[i].level<<endl;
}
cout<<"**********************"<<endl;
FILE *fp1 = NULL;
if ((fp1 = fopen("data.txt", "w+")) == NULL)
{
cout << "角色文件没有找到,角色加载失败!请重新创建角色。" << endl;
}
for(int i = 0;i < x ;i++)
fwrite(&pwRole[i], sizeof(struct role), 2, fp1);
fclose(fp1);
FILE *fp2;
fp2 = fopen("data.txt","r+");
for(int i = 0;i < x ;i++)
fread(&prRole[i], sizeof(struct role), 2 , fp2);
fclose(fp2);
cout<<prRole[0].name<<endl;
return 0;
}
调试的时候,红色部分出现了错误的指针。
------解决方案--------------------
看不出有什么问题啊,FILE是c语言的文件指针,得#include <stdio.h>吧
------解决方案--------------------
文件指针在C语言中用一个指针变量指向一个文件, 这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。 定义说明文件指针的一般形式为: FILE* 指针变量标识符; 其中FILE应为大写,它实际上是由系统定义的一个结构, 该结构中含有文件名、文件状态和文件当前位置等信息。 在编写源程序时不必关心FILE结构的细节。例如:FILE *fp; 表示fp是指向FILE结构的指针变量,通过fp 即可找存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件, 实施对文件的操作。习惯上也笼统地把fp称为指向一个文件的指针。文件的打开与关闭文件在进行读写操作之前要先打开,使用完毕要关闭。 所谓打开文件,实际上是建立文件的各种有关信息, 并使文件指针指向该文件,以便进行其它操作。关闭文件则断开指针与文件之间的联系,也就禁止再对该文件进行操作。
因此需要用到<stdio.h>这个库。
------解决方案--------------------
当你给一个指针赋值NULL或0的时候,调试时用鼠标悬浮在该指针变量上,IDE会提示你这是一个错误的指针~这是正常的。当你给这个指针赋值后就不存在这个问题了。
------解决方案--------------------
你写入的是二进制数据~~
fwrite(&pwRole[i], sizeof(struct role), 2, fp1); —— 后面的2应该是1 吧?
------解决方案--------------------
我那你的代码运行确实一点问题都没有
我用的是VS2005
代码是这样的:
// test8.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
#define MAX_SIZE 99
struct role
{
char name[MAX_SIZE];
int life;
int level;
};
int _tmain(int argc, _TCHAR* argv[])
{
int x;
cout<<"请输入要创建几个角色"<<endl;
cin>>x;
role *pwRole = new role[x];
role *prRole = new role[x];
for(int i = 0; i < x;i ++)
{
cout<<"请输入第";
cout<<(i+1);
cout<<"个人的姓名:"<<endl;
cin>>pwRole[i].name;
cout<<"请输入第";
cout<<(i+1);
cout<<"个人的生命:"<<endl;
cin>>pwRole[i].life;
cout<<"请输入第";
cout<<(i+1);
cout<<"个人的等级:"<<endl;
cin>>pwRole[i].level;
}
for(int i = 0; i < x;i ++)
{
cout<<pwRole[i].name<<endl;
cout<<pwRole[i].life<<endl;
cout<<pwRole[i].level<<endl;
}
cout<<"**********************"<<endl;
FILE *fp1 = NULL;
if ((fp1 = fopen("data.txt", "w+")) == NULL)
{
cout << "角色文件没有找到,角色加载失败!请重新创建角色。" << endl;
}
for(int i = 0;i < x ;i++)
fwrite(&pwRole[i], sizeof(struct role), 2, fp1);
fclose(fp1);
FILE *fp2;
fp2 = fopen("data.txt","r+");
for(int i = 0;i < x ;i++)
fread(&prRole[i], sizeof(struct role), 2 , fp2);
fclose(fp2);
cout<<prRole[0].name<<endl;
return 0;
}
调试的时候,红色部分出现了错误的指针。
------解决方案--------------------
看不出有什么问题啊,FILE是c语言的文件指针,得#include <stdio.h>吧
------解决方案--------------------
文件指针在C语言中用一个指针变量指向一个文件, 这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。 定义说明文件指针的一般形式为: FILE* 指针变量标识符; 其中FILE应为大写,它实际上是由系统定义的一个结构, 该结构中含有文件名、文件状态和文件当前位置等信息。 在编写源程序时不必关心FILE结构的细节。例如:FILE *fp; 表示fp是指向FILE结构的指针变量,通过fp 即可找存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件, 实施对文件的操作。习惯上也笼统地把fp称为指向一个文件的指针。文件的打开与关闭文件在进行读写操作之前要先打开,使用完毕要关闭。 所谓打开文件,实际上是建立文件的各种有关信息, 并使文件指针指向该文件,以便进行其它操作。关闭文件则断开指针与文件之间的联系,也就禁止再对该文件进行操作。
因此需要用到<stdio.h>这个库。
------解决方案--------------------
当你给一个指针赋值NULL或0的时候,调试时用鼠标悬浮在该指针变量上,IDE会提示你这是一个错误的指针~这是正常的。当你给这个指针赋值后就不存在这个问题了。
------解决方案--------------------
你写入的是二进制数据~~
fwrite(&pwRole[i], sizeof(struct role), 2, fp1); —— 后面的2应该是1 吧?
------解决方案--------------------
我那你的代码运行确实一点问题都没有
我用的是VS2005