我只是测试一个我想测试的小程序。
我想知道是否有办法使用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);
}
答案 0 :(得分:5)
用以下内容替换你的fprintf(stderr,...)电话:
perror("file open");
(stderr只是一个用于发送错误消息的流,因此它们不会与正常的程序输出混淆 - 如果您重定向到文件或类似文件)。
答案 1 :(得分:3)
使用strerror()函数检索描述错误的字符串。
答案 2 :(得分: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;
}