首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

CList的使用方法,文件中读取数据,输出异常

2012-09-03 
CList的使用方法,文件中读取数据,输出错误。C/C++ code#includeiostream#includeafx.h#include afxtem

CList的使用方法,文件中读取数据,输出错误。

C/C++ code
#include<iostream>#include<afx.h>#include <afxtempl.h>using namespace std;int InitialLinkList(FILE * const file,CList<char,char&> * const clist,int CharCount);int main(){    /*CString str,str1,str2;    str = "123";    str1 = "234";    str2 = "345";    CList<CString,CString> list;      list.AddTail(str);    list.AddTail(str1);    list.AddTail(str2);    ::MessageBoxA(0,LPCSTR(list.GetAt(list.GetHeadPosition()).GetBuffer(4)),"test",MB_OK);    string str1 = "123";    list.GetAt(list.GetHeadPosition()).ReleaseBuffer(4);    */    /*if(strcmp(str,str1))//string与CString不能进行比较 均可以与char* 进行比较  比较的是值。        return 0;    else        return -1;*/    /*    wcout<<list.GetAt(list.GetHeadPosition())<<endl;*//*    CString str;    FILE * file;    file = fopen("test.txt","r");    if(!file)        return -1;    CStdioFile cfile(file);    while(!feof(file))    {        cfile.ReadString(str);    }    ::MessageBoxA(0,LPCSTR(str.GetBuffer(100)),"test",MB_OK);    */    char buf[1000];    memset(buf,0,sizeof(buf));    CList<char,char&> listTwo,listThree,listFour,listFive,listSix,listSeven,listEight;    FILE * fileOne = fopen("TwoChar.txt","r");    if(InitialLinkList(fileOne,&listTwo,2) == -1)        return -1;//如果返回-1表示词库一打开失败 ,主函数返回,链表初始化不成功。    return 0;}//初始化链表。。int InitialLinkList(FILE * const file,CList<char,char&> * const clist,int CharCount){        char  strbuf[50];    if(file == NULL)        return -1;    //char* lpcstr = (char *)strbuf.GetBuffer(2*CharCount + 1);//    CStdioFile cfile(file);//    CString str;    while(!feof(file))    {        fgets(strbuf,20,file);        //cfile.ReadString(str);        clist ->AddTail(strbuf[50]);        POSITION ps = clist->GetTailPosition();        //wcout<<(clist->GetAt(ps))<<endl;    ::MessageBoxA(0,LPCSTR(&(clist->GetAt(ps))),"test",MB_OK);    }        //strbuf.ReleaseBuffer(-1);    fclose(file);}

运行后在MessageBox这处设置断点,弹出的都是乱码? 是我打开文件的方式出错还是CList使用错误! 


[解决办法]
strbuf = new char[2*CharCount+1];//5个
fgets(strbuf,20,file);//为什么 20 ?

缓冲只有5个,要读20个;不是越界了!
如果最大20,那么
strbuf = new char[21];

热点排行