fwprintf何时返回负数?

时间:2015-05-29 15:22:51

标签: c widechar

我无法在任何地方的文档中找到它,我发现它只是在发生错误时返回负数。它有什么错误?

错误发生在如下所示的函数中:

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");
}

此外,此错误仅在程序执行期间的某个时刻出现并保持不变,就像达到某种限制一样。

2 个答案:

答案 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