FILE* pFile;
pFile = fopen("1.txt","r");
char* pBuf;
fseek(pFile,0,SEEK_END);
int len = ftell(pFile);
rewind(pFile);
pBuf = new char[len];//在堆中分配内存
memset(pBuf,0,len);//初始化堆中分配的内存
fread(pBuf,1,len,pFile);//读取数据
fclose(pFile);
MessageBox(pBuf);上面是一个简单读取文件的代码。发现memset函数不能初始化堆中分配的内存。就是MessageBox的显示中还是有乱码。
求解释????

解决方案 »

  1.   

    pBuf = new char[len];//在堆中分配内存
    memset(pBuf,0,len);//初始化堆中分配的内存
    改为
    pBuf = new char[len+1];//在堆中分配内存
    memset(pBuf,0,len+1);//初始化堆中分配的内存
      

  2.   

    对啊
    你的连续两个操作
    memset(pBuf,0,len);//初始化堆中分配的内存
    fread(pBuf,1,len,pFile);//读取数据
    pBuf被填充了
      

  3.   

    同意1#,
    ftell返回的长度以后,new多分配一个字节数据就可以了
      

  4.   

    乱码不一定是错误,看原始文件是什么;字符串后面加 '\0' 是个好习惯;如果文件只有一行,就是后面没有加 '\0' 导致的;如果不止一行,在 windows 中,可能是文件本身的内容就包含乱码。
      

  5.   

    pBuf[len-1]='\0';
    MessageBox(pBuf);
      

  6.   


    pBuf = new char[len];//在堆中分配内存,分配的是len,但是实际占用的内存是len+1, 
    所以,下面是
    memset(pBuf,0,len+1);//初始化堆中分配的内存