我的环境是win2000+VC6,用向导生成一简单SDI程序框架,在一菜单上添加一命令,其处理函数如下(本意是想把a文件中内容原样复制到b文件中):
void CMainFrame::OnWriteFile() 
{
    // TODO: Add your command handler code here
    char str[1];//状态1,当为str[6]时为状态2
    FILE *pFile, *pTemFile;
    pFile = fopen("g:\\a.txt","r");
    int i = 0;
    char ch;
    while (!feof(pFile))
{
             ch = fgetc(pFile);
    str[i++] = ch;
}
    str[i-1] = 0;//状态4,当去掉此行时为状态3
    pTemFile = fopen("g:\\b.txt","a");
    fputs(str, pTemFile);
    fclose(pTemFile);
    fclose(pFile);
}a.txt的内容为"abcd"状态1和3时b.txt结果为"abcdB"
状态1和4时b.txt结果为"abcd"
状态2和3时b.txt结果为"abcd烫虗B"
状态2和4时b.txt结果为"abcd"请问如何解释?如何解决?

解决方案 »

  1.   

    C/C++的基本知识还没学好,为什么要上MFC?其原因是:
    1. 字符缓冲区的太小以至于产生溢出.
    2. 字符口是以NULL做为结尾符的.最简单的解决:
    void CMainFrame::OnWriteFile() 
    {
        CopyFile("g:\\a.txt","g:\\b.txt",TRUE);
    }你设想的解法
    void CMainFrame::OnWriteFile() 
    {
        // TODO: Add your command handler code here
        
        FILE *pFile, *pTemFile;
        pFile = fopen("g:\\a.txt","r");
        fseek(pFile,0,SEEK_END);
        int nLen=ftell(pFile)+1;
        char* str=new char[nLen];
        memset(str,0,nLen);
        
        fseek(pFile,0,SEEK_SET);
        fread(str,sizeof(char),nLen,pFile);    pTemFile = fopen("g:\\b.txt","a");
        fwrite(str,sizeof(char),nLen,pTemFile);
        fclose(pTemFile);
        fclose(pFile);
    }
      

  2.   

    呵呵。我是菜鸟。霸王硬上弓。我并不是真的去复制文件,而是要把文本文件转换为字符串,以便进行查找,删除,插入等操作。请看http://expert.csdn.net/Expert/topic/2530/2530216.xml?temp=.4679682上面的那段代码其实是纯C语言的,不知道我的想法在C++中,在MFC中可如何实现。