我的意思是读出一个文件里的数据,让这些数据形成链表,编译是通过了,但是运行时总是出错,是某某内存不能read.
代码如下:
         ifstream intput;
CString m_text3,m_text4;
          UpdateData(true);
intput.open("d:\\ok.txt",ios::in|ios::binary);
if(!intput)
{cout<<"can't open the file"<<endl;return;}
while(!intput.eof())
{intput.read((char *)&m_text3,sizeof(CString));
intput.read((char*)&m_text4,sizeof(CString));
if(head==NULL){n=m=new words;strcpy(m->word,m_text3);strcpy(m->wordanswer,m_text4);m->next=NULL;head=m;}
if(head!=NULL){m=new words;strcpy(m->word,m_text3);strcpy(m->wordanswer,m_text4);m->next=NULL;n->next=m;n=m;}
}
intput.close();

解决方案 »

  1.   

    intput.read((char *)&m_text3,sizeof(CString));
    =============================================
    这句话好像问题很大。read的参数是char*没错,但也不能随便拿个指针来强制转换阿。
    sizeof(CString)这句话太新鲜了,没见过这么写的。
    应该定义一个char*,比如char *pChar = new char[MAX_LEN];
    intput.read(pChar,MAX_LEN);来读取
      

  2.   

    不能对CString类型进行这样的强制类型转换啊,CString的前几个字节保存的是字符串的长度。我们姑且不说你的sizeof(CString)的问题,你用这种方式读入的字符串。原本应该是前几个字符的,就被你硬生生变成了字符串的长度。后面进行Strcpy等操作的时候怎么能对呢?而且,在使用m_text3等变量之前,也没有对数据清零,这样在你用PChar类型的时候,会出现很多问题,譬如说你的strcpy,这个函数默认是当碰到0或者空格的时候表示复制的结束。没有清空,变量中根据编译器的不同,有时会是一些随机数,你的strcpy的结束标志又到哪里去找呢?