ubuntu return 值 'fscanf' 中的警告
warning in ubuntu in return value of 'fscanf'
从http://festvox.org/安装节日语音合成系统...直接通过运行通用脚本。
面对下面给定的问题.....这个问题是否会影响我在节日框架上的工作?????
eps.c: In function ‘getd’:
eps.c:142:7: warning: ignoring return value of ‘fscanf’, declared with attribute warn_unused_result [-Wunused-result]
fscanf(fp, "%d %d", x, y);
^
阅读 fscanf(3) 的文档。您应该使用返回的成功扫描项目的计数,例如代码类似于:
int x = 0, y = 0;
if (fscanf(fp, "%d %d", &x, &y) < 2) {
fprintf(stderr, "missing numbers at offset %ld\n", ftell(fp));
exit(EXIT_FAILURE);
}
这样您就可以改进 eps.c
文件(也许可以提交补丁 and/or 上游错误报告)。
此警告表示不检查 scanf 的 return 值并不是一个好主意。
我认为转换为 (void)
是避免这种情况的一种方法,但显然它不是这里讨论的那样:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509
但是你得到的不是错误,只是警告(你的标题有点误导)
如果不使用该值,则显然不是问题。
手册页说:
The value EOF is returned if the end of input is reached before
either the first successful conversion or a matching failure occurs.
EOF is also returned if a read error occurs, in which case the error
indicator for the stream (see ferror(3)) is set, and errno is set to
indicate the error.
这意味着您可以检查 EOF:
#include<stdio.h>
int main(void){
int a;
printf("Please give the value of A: ");
if(scanf("%d",&a) != EOF){
printf("\nThe value of A is\t%d\n",a);
}
return 0;
}
或者:
#include<stdio.h>
#include <errno.h>
#include<string.h>
int main(void){
int a, errnum = errno;
printf("Please give the value of A: ");
if(scanf("%d",&a) == EOF){
fprintf(stderr, "Value of errno: %d\n", errno);
perror("Error printed by perror");
fprintf(stderr, "Error opening file: %s\n", strerror( errnum ));
}
printf("\nThe value of A is\t%d\n",a);
return 0;
}
这适用于:
scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf - input format con‐
version
从http://festvox.org/安装节日语音合成系统...直接通过运行通用脚本。 面对下面给定的问题.....这个问题是否会影响我在节日框架上的工作?????
eps.c: In function ‘getd’:
eps.c:142:7: warning: ignoring return value of ‘fscanf’, declared with attribute warn_unused_result [-Wunused-result]
fscanf(fp, "%d %d", x, y);
^
阅读 fscanf(3) 的文档。您应该使用返回的成功扫描项目的计数,例如代码类似于:
int x = 0, y = 0;
if (fscanf(fp, "%d %d", &x, &y) < 2) {
fprintf(stderr, "missing numbers at offset %ld\n", ftell(fp));
exit(EXIT_FAILURE);
}
这样您就可以改进 eps.c
文件(也许可以提交补丁 and/or 上游错误报告)。
此警告表示不检查 scanf 的 return 值并不是一个好主意。
我认为转换为 (void)
是避免这种情况的一种方法,但显然它不是这里讨论的那样:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509
但是你得到的不是错误,只是警告(你的标题有点误导)
如果不使用该值,则显然不是问题。
手册页说:
The value EOF is returned if the end of input is reached before either the first successful conversion or a matching failure occurs. EOF is also returned if a read error occurs, in which case the error indicator for the stream (see ferror(3)) is set, and errno is set to indicate the error.
这意味着您可以检查 EOF:
#include<stdio.h>
int main(void){
int a;
printf("Please give the value of A: ");
if(scanf("%d",&a) != EOF){
printf("\nThe value of A is\t%d\n",a);
}
return 0;
}
或者:
#include<stdio.h>
#include <errno.h>
#include<string.h>
int main(void){
int a, errnum = errno;
printf("Please give the value of A: ");
if(scanf("%d",&a) == EOF){
fprintf(stderr, "Value of errno: %d\n", errno);
perror("Error printed by perror");
fprintf(stderr, "Error opening file: %s\n", strerror( errnum ));
}
printf("\nThe value of A is\t%d\n",a);
return 0;
}
这适用于:
scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf - input format con‐ version