【问题标题】:ignoring return value of ‘scanf’, declared with attribute warn_unused_result忽略“scanf”的返回值,用属性 warn_unused_result 声明
【发布时间】:2020-04-30 11:30:22
【问题描述】:

所以我有这个功能,基本上就是给scanf这个人写的名字,然后返回。

但是,当我检查错误时,它说我忽略了 scanf 的值,而我实际上是在返回它并在其他地方使用它。

char* nomes (int n, char* nome ) {
    if (n == 1) printf(" Escolha o nome \n(max10 e sem espaços)\n");
    printf(" Jogador %d:",n);
    scanf("%10s",nome);
    print_linha ();
    return nome;
}

【问题讨论】:

  • 返回值。也就是说,scanf 返回的值,而不是它写入的参数之一。 int return_value = scanf(..);
  • 但我不明白我为什么忽略它。
  • 你看到我的代码并和你的比较了吗?您是否有一个从 scanf 返回的变量设置的变量?您似乎指的是nom,这不是返回值。
  • 这就是编译器告诉你的。你应该使用它。你不是的事实是问题所在。 scanf 的返回值告诉您它能够匹配多少个输入。通过忽略它,您可能会忽略失败并使用无效的 nome 值(如果失败,scanf 不会将任何内容放入 nome)。
  • @kiner_shah 这不是一个好建议。抑制有效警告不是一个好主意。

标签: c gcc-warning


【解决方案1】:

看看scanf 函数,例如here。它返回int。您在代码中所做的是使用由scanf 修改的参数。这是你想要的:

char* nomes (int n,char* nome ){
    if (n==1) 
        printf(" Escolha o nome \n(max10 e sem espaços)\n");
    printf(" Jogador %d:",n);

    int result = scanf("%10s",none);
    // do something with result
    ...

    print_linha ();
    return nome;
}

如果您不需要返回类型,您可以简单地转换它(但我认为这是一种不好的做法): (void)scanf("%10s",none);

【讨论】:

    猜你喜欢
    • 2011-11-08
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多