2009-07-23 72 views
0

我只是在測試一個我想測試的小程序。顯示標準錯誤消息

我想知道是否有方法使用stderr來顯示實際的錯誤是什麼。

例如,如果文件不存在。是否有可顯示的標準錯誤?

我正在使用stderr,我想通過使用它,我可以顯示實際的錯誤是什麼。

例如。如果文件沒有退出。是否有任何錯誤發送到可以顯示的stderr?

我希望我清楚我的問題。

非常感謝您的任何建議。

#include <stdio.h> 
#include <string.h> 

int main(void) 
{ 
    char buffer[100] = {'\0'}; /* declare and clean buffer */ 

    FILE *fp; 
    int len_of_buff = 0; 

    fp = fopen("licenseURL.txt", "r"); 

    if(fp == NULL) 
    { 
     fprintf(stderr, "There was a error opening a file ???"); 

     exit(1); 
    } 

    fgets(buffer, sizeof(buffer), fp); 
    len_of_buff = strlen(buffer); 
    buffer[len_of_buff + 1] = '\0'; /* null terminate */ 
    printf("The url is: [ %s ]\n", buffer); 

    fclose(fp); 
} 

回答

5

更換你fprintf中(錯誤,...)調用具有:

perror("file open"); 

(錯誤僅僅是發送錯誤信息流,使他們不會被弄混了正常的程序輸出 - 如果你重定向到一個文件或類似的)。

3

使用strerror()函數檢索描述錯誤的字符串。

1

我的未經測試的版本是這樣的:


#include <errno.h> 
#include <stdarg.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

static void 
die(const char *errstr, ...) { 
     va_list ap; 

     va_start(ap, errstr); 
     vfprintf(stderr, errstr, ap); 
     va_end(ap); 
     exit(EXIT_FAILURE); 
} 

int 
main(int argc, char **argv) { 
     static const char licenseURL[] = "licenseURL.txt"; 
     static char buf[100]; /* declare a clean buffer */ 
     FILE *fp; 
     size_t len = 0; 

     if(!(fp = fopen(licenseURL, "r"))) 
       die("couldn't %s: %s\n", licenseURL, strerror(errno)); 
     if(!fgets(buf, sizeof buf, fp)) 
       die("fgets failed: %s\n", strerror(errno)); 
     len = strlen(buf); 
     if(len > 1 && buf[len - 1] == '\n') 
       buf[len - 1] = '\0'; /* cut off trailing \n */ 
     printf("The url is: [ %s ]\n", buf); 
     fclose(fp); 

     return 0; 
}