2011-04-20 62 views
2

在我的程序fprintf()中返回-1,表示有錯誤。我怎樣才能找出實際的錯誤是什麼?如何找到fprintf()的實際錯誤?

+2

它是在線42 – AProgrammer 2011-04-20 07:02:26

+0

第36字符只是爲了解釋@AProgrammer的諷刺(和有趣)的答案:當你問這個是關係到一個問題你的代碼,它實際上**更有效率地發佈實際的代碼與你的問題。我們顯然無法猜出您輸入的內容。 – ereOn 2011-04-20 07:14:56

+1

36是什麼意思? :) – user237419 2011-04-20 07:16:35

回答

9
#include <errno.h> 
#include <string.h> 

... 
rc = fprintf(...) 
if (rc < 0) 
    printf("errno=%d, err_msg=\"%s\"\n", errno,strerror(errno)) 
+1

你不應該自己聲明'errno',只需要包含'';它可能是一個宏而不是一個變量。 – 2011-04-20 07:52:36

+0

點了。 libc操作系統依賴。我認爲在舊的Linux libcs​​中,你必須聲明它爲extern tho。糾正。 – user237419 2011-04-20 08:01:04

+0

Err,adirau,這甚至是_worse._「#ifndef」只適用於預處理器宏而不是變量。由於ISO要求'errno.h'定義一個'errno''變量「,所以最好拋棄整個'#ifdef'塊。我爲你解決它,希望你不介意。 – paxdiablo 2011-04-20 08:19:01

3

您需要檢查errno的值。大多數庫函數會將其設置爲特定的錯誤代碼,您可以在errno.h中查找它或使用perrorstrerror來獲取用戶可讀的版本。

例如:

#include <stdio.h> 
#include <string.h> 
#include <errno.h> 
int main (void) { 
    FILE *fh = fopen ("junk", "w"); 
    if (fh != NULL) { 
     if (fprintf (fh, "%s", "hello") < 0) 
      fprintf (stderr, "err=%d: %s\n", errno, strerror (errno)); 
     fclose (fh); 
    } 
    return 0; 
}