【问题标题】:When does fwprintf return a negative number?fwprintf 什么时候返回负数?
【发布时间】:2015-08-12 13:01:43
【问题描述】:

我在任何地方的文档中都找不到它,我只发现它在发生错误时返回一个负数。会是什么错误?

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

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

此外,此错误仅在程序执行期间出现并停留在那里,就好像达到了某种限制一样。

【问题讨论】:

    标签: c widechar


    【解决方案1】:

    相信fwprintf()的失败原因与fputwc()的失败原因大体相同。您可以随时查看errno 去了解错误的确切性质。

    引用手册页,错误的类型是,

    [EAGAIN]

    [EBADF]

    [EFBIG]

    [EFBIG]

    [EINTR]

    [EIO]

    [ENOSPC]

    [EPIPE]

    [ENOMEM]

    [ENXIO]

    [EILSEQ]

    [EINVAL]

    【讨论】:

      【解决方案2】:

      根据fwprintf的定义:

      返回值 成功时,返回写入的字符总数。

      如果发生写入错误,则设置错误指示符(ferror)并返回负数。

      如果写入宽字符时出现多字节字符编码错误,则将errno设置为EILSEQ并返回一个负数。

      所以它返回一个负数是因为写入错误或多字节字符编码错误。由于您使用的是宽字符双指针,因此很可能是后者,因此请检查 errno 以查看它是否设置为 EILSEQ

      【讨论】:

        猜你喜欢
        • 2017-03-04
        • 1970-01-01
        • 2014-11-04
        • 1970-01-01
        • 2014-10-25
        • 2019-07-08
        • 1970-01-01
        • 2021-10-11
        相关资源
        最近更新 更多