C++ - 将 ANSI 编码的文本读取为宽字符串

标签 c++

我的目标是阅读 ANSI 编码的文本。但出于某些原因,我使用的是 fgetws()(不是 fgets)函数,当然文件是以二进制模式打开的。这是演示我的问题的短代码

  bool testfunc(wchar_t path[])
  {
     wchar_t buffer[10];

     if( FILE * fr=_wfopen(path,L"rb") )
     {
        fgetws(buffer,sizeof(buffer),fr);
        fclose(fr);
        return true;
     }
     else return false;
  }

当我调用此函数并将 ANSI 编码的文本文件路径作为参数传递时,运行时出现访问冲突错误。似乎当文本大小足够大时会发生错误。我不知道问题出在哪里。

最佳答案

根据文档,fgetws 的第二个参数是数组中宽字符的数量,而不是字节数,因此:

fgetws(buffer,sizeof(buffer)/sizeof(*buffer),fr);

一个有用的经典宏是:

#define countof(x) (sizeof(x)/sizeof(*(x)))

或者花哨的 C++ 模板:

template <typename T, int N>
int countof(T (&a)[N])
{
    return N;
}

关于C++ - 将 ANSI 编码的文本读取为宽字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14175198/

相关文章:

c++ - 使用重复字符压缩字符串

c++ - 斐波那契数列,二分查找

c++ - Xcode - 将二进制文件与调试和发布库链接

c++ - 如何为我的 Qt UDP 程序模拟数据包丢失?

c++ - 解压可变宏的任何技巧?

c++ - 有没有办法根据绘制的内容设置QImage分辨率?

c++ - 进行 OCR 之前的预处理(tesseract、OpenCV)

c++ - GCC 4.4.1 是否因不接受 ctor-initializer 中的注入(inject)类名而出现错误?

c++ - 模板中的第二个lambda函数导致编译错误(智能感知无法检测到问题)-错误C2988

c# - 帮助专门从 C# 背景学习 C++ 的指南