我无法在任何地方的文档中找到它,我发现它只是在发生错误时返回负数。它有什么错误?
错误发生在如下所示的函数中:
void foo(wchar_t** a)
{
for (int i = 0; i < N; i++)
if (fwprintf(stderr, L"%ls ", a[i]) < 0)
puts("OOPS!");
fwprintf(stderr, L"\n");
}
此外,此错误仅在程序执行期间的某个时刻出现并保持不变,就像达到某种限制一样。
答案 0 :(得分:1)
我相信,fwprintf()
的失败原因与fputwc()
的失败原因基本相同。您可以随时查看errno
获取错误的确切性质。
引用手册页,错误类型为
[EAGAIN]
[EBADF]
[EFBIG]
[EFBIG]
[EINTR]
[EIO]
[ENOSPC]
[EPIPE]
[ENOMEM]
[ENXIO]
[EILSEQ]
[EINVAL]
答案 1 :(得分:0)
根据fwprintf的定义:
返回值 成功时,将返回写入的字符总数。
如果发生写入错误,则设置错误指示符(ferror)并返回负数。
如果在写入宽字符时发生多字节字符编码错误,则将errno设置为EILSEQ并返回负数。
因此,由于写入错误或多字节字符编码错误,它返回负数。由于您使用的是宽字符双指针,因此很可能是后者,因此请检查errno
以查看它是否设置为EILSEQ
。