2011-04-20 37 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; 
}