2015-05-29 50 views
1

我無法在任何地方的文檔中找到它,我發現的所有錯誤都是在發生錯誤時返回負數。它可能是什麼錯誤?fwprintf何時返回負數?

的錯誤發生在一個功能,看起來像這樣:

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

fwprintf定義:

返回值 如果成功,則返回寫入的字符總數。

如果發生寫入錯誤,則會設置錯誤指示符(ferror)並返回負數。

如果在編寫寬字符時發生多字節字符編碼錯誤,則將errno設置爲EILSEQ並返回負數。

因此,它由於寫入錯誤或多字節字符編碼錯誤而返回負數。由於您使用寬字符雙指針,因此最有可能是後者,因此請檢查errno以查看它是否設置爲EILSEQ

+0

是這是'EILSEQ',謝謝。 – Dunno

1

我認爲,fwprintf()的失敗原因大多與fputwc()相同。你可以隨時檢查errno去獲得錯誤的確切性質。

引述手冊頁,錯誤類型是,

[EAGAIN]

[EBADF]

[EFBIG]

[EFBIG]

[EINTR]

[ EIO]

[ENOSPC]

[EPIPE]

[ENOMEM]

[ENXIO]

[EILSEQ]

[EINVAL]