如何正确地将小数点sscanf为char

时间:2018-03-29 13:16:42

标签: c

PVS-Studio向我发出警告:

char c;
sscanf(line, "%d", &c);

我将%d更改为%c但这会产生错误,因为“c”现在包含数字的ASCII值而不是小数,所以我回到“%d”。

那么正确的说明符是什么?有另一种解决方案吗?

2 个答案:

答案 0 :(得分:5)

cchar。您要求扫描int。 PVS-Studio正确地警告你。将c的类型更改为int并扫描%d

答案 1 :(得分:3)

您的问题有多种解决方案:

  • 您可以指定正确的目的地类型:

    char c;
    if (sscanf(line, "%hhd", &c) == 1) {
        /* successful conversion */
        ...
    }
    
  • 您可以使用中间变量:

    char c;
    int cc;
    if (sscanf(line, "%d", &cc) == 1) {
        /* successful conversion */
        c = cc;
        ...
    }
    
  • 您可以使用不同的转换功能:

    #include <stdlib.h>
    ...
    char c;
    c = atoi(line);  // no error handling, return 0 if not a number
    

但请注意,在所有情况下,如果sscanf()atoi()转换的数值超出类型char的范围,则行为未定义。大多数当前系统只使用转换结果的低位字节,但C标准不保证它。