1

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

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

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

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

4

2 回答 2

1

我相信,失败的原因fwprintf()大多与fputwc(). 您可以随时检查errnogo 获取错误的确切性质。

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

[再次]

[EBADF]

[EFBIG]

[EFBIG]

[EINTR]

[EIO]

[ENOSPC]

[EPIPE]

[ENOMEM]

[恩西奥]

[EILSEQ]

[EINVAL]

于 2015-05-29T15:28:11.123 回答
0

根据fwprintf的定义:

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

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

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

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

于 2015-05-29T15:26:58.753 回答