返回顶部

fread()函数读文本文件重复读最后一个字符问题【已解决】

  对文本文件读写时遇到一个问题,fread()读所有内容的时候文件的最后一个字符总会重复读,我的代码如下:

    FILE* file = nullptr;
    fopen_s(&file, "D:\\test.ini", "r");
    const uint32_t nlen = 1024;
    std::unique_ptr<char[]> qpFile(new char[nlen]);
    char* chTemp = qpFile.get();
    memset(chTemp, 0,nlen );
    size_t isize = fread(chTemp, sizeof(char), nlen , file); 
    fclose(file);    
    file = nullptr;

   test.ini文件内容如下:

  调试 chTemp="[test]\nkey=valuee",多了一个字符,但是读出的字节数isize=16 !!后面又尝试其它内容,总会重复读最后一个字符,

 

  然后就这样改了下:

    FILE* file = nullptr;
    fopen_s(&file, "D:\\test.ini", "r");
    const uint32_t nlen = 1024;
    std::unique_ptr<char[]> qpFile(new char[nlen]);
    char* chTemp = qpFile.get();
    memset(chTemp, 0,nlen );
    size_t isize = fread(chTemp, sizeof(char), nlen , file);
    chTemp[isize] = '\0';//读的重复字符改为结束符
    fclose(file);    
    file = nullptr;

  再看chTemp="[test]\nkey=value",解决问题。

  fread读文本文件总会重复读最后一个字符,那么读二进制文件会不会重复呢?

  找了几个二进制文件读了下,没有重复读!!

 

  

 

posted @ 2020-03-05 16:02  Zoya23  阅读(858)  评论(0编辑  收藏  举报