0

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);
   ^
4

3 に答える 3

3

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ます (また、パッチやバグ レポートをアップストリームに送信することもできます)。

于 2015-08-23T12:05:46.463 に答える
0

マニュアルページには次のように書かれています:

最初の変換の成功または一致の失敗が発生する前に入力の終わりに達した場合、値 EOF が返されます。読み取りエラーが発生した場合にも EOF が返されます。この場合、ストリームのエラー インジケータ (ferror(3) を参照) が設定され、エラーを示すために errno が設定されます。

これは、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 - 入力形式の変換

于 2015-08-23T13:09:42.697 に答える
0

この警告は、scanf の戻り値をチェックしないのはあまり良い考えではないことを示しています。

へのキャストはそれを回避する方法だと思いました(void)が、明らかにここで説明されているとおりではありません: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509

ただし、表示されるのはエラーではなく、単なる警告です (タイトルは誤解を招く可能性があります)。

値が使用されていない場合、それは明らかに問題ではありません。

于 2015-08-23T12:07:20.843 に答える