我的目标是阅读 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/