关于文件流的迷惑~
下面我写了一个将字符和整形数全部输出到文件,然后读进文件的例子,其中可以注释掉写文件操作,来进行读操作,也可以注释掉读文件操作进行写文件,我这里把写文件给注释掉了,我这代码有个问题:
(*)1.为什么我把new出来的空间delete掉,在运行时会出现问题.(看完整代码)
(*)2.还有我写文件时,由于我写的字符串可能读的时候我并不清楚有多少个,那我必须用回车行进行分割,这样的话才不致于读到其他变量的内容,比如一下就会出现读到其他内容的错误:
input.read(name,sizeof(char)*strlen(name));
input.read(memo,sizeof(char)*strlen(memo));
input.read(addr,sizeof(char)*strlen(addr));
input.read((char*)&age,sizeof(int));
我读到memo时可能会读到name的内容或者addr的内容,我觉得这种解决的办法唯有写的时候就
output.write(name,sizeof(char)*strlen(name));
output<<endl;
output.write(memo,sizeof(char)*strlen(memo));
output<<endl;
output.write(addr,sizeof(char)*strlen(addr));
output<<endl;
output.write((char*)&age,sizeof(int));
output<<endl;
然后读的时候,这样行读
input.getline(name,sizeof(char)*strlen(name));
input.getline(memo,sizeof(char)*strlen(memo));
input.getline(addr,sizeof(char)*strlen(addr));
input.getline((char*)&age,sizeof(int));
不知贵兄才是否有好的方法可以解决如上问题;
//完整代码:
#include <fstream.h>
#include <string.h>
//#include
//using namespace std;
int main()
{
//write
/*
int age=0;
char*name;
char*memo;
char*addr;
name=new char[10];
memo=new char[100];
addr=new char[100];
memset(name,' ',strlen(name));
memset(memo,' ',strlen(memo));
memset(addr,' ',strlen(addr));
ofstream output("test.db");
strcpy(name,"huangzh");
strcpy(memo,"i am a programmer");
strcpy(addr,"shanghai");
age=22;
output.write(name,sizeof(char)*strlen(name));
output<<endl;
output.write(memo,sizeof(char)*strlen(memo));
output<<endl;
output.write(addr,sizeof(char)*strlen(addr));
output<<endl;
output.write((char*)&age,sizeof(int));
output<<endl;
output.flush();
output.close();
// why error?
//delete[] name;
/// delete[] memo;
// delete[] addr;
*/
//read
int age=0;
char*name;
char*memo;
char*addr;
name=new char[10];
memo=new char[100];
addr=new char[100];
memset(name,' ',strlen(name));
memset(memo,' ',strlen(memo));
memset(addr,' ',strlen(addr));
ifstream input("test.db");
input.getline(name,sizeof(char)*strlen(name));
input.getline(memo,sizeof(char)*strlen(memo));
input.getline(addr,sizeof(char)*strlen(addr));
input.getline((char*)&age,sizeof(int));
cout<<name<<endl;
cout<<memo<<endl;
cout<<addr<<endl;
cout<<age<<endl;
//why error?
delete[] name;
delete[] memo;
delete[] addr;
input.close();
}