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];