sscanf对字符类有什么参数类型?

时间:2010-10-31 10:33:54

标签: c scanf

我一直试图让sscanf使用字符类来识别相当简单的格式。我注意到,当我向sscanf提供char*来匹配字符类时,它会覆盖前一个字节,就像它期望指向2个字节的指针一样。

我正在努力实现的简化版本:

#include <stdio.h>

int main(void)
{
    char num1;
    char num2;
    int s;
    s = sscanf("1,2", " %[01234567] , %[01234567]", &num1, &num2);
    printf("%d %c %c\n", s, num1, num2);
    return 0;
}

预期输出:2 1 2

实际输出:2 2

但是,如果我将char替换为short(或大于一个字节的其他内容),那么它会按预期工作,但我收到有关format expects type char*的警告。

论证实际上应该是什么类型,还是我犯了其他错误?

1 个答案:

答案 0 :(得分:3)

sscanf需要一个字符串。

char num1[BIG_ENOUGH], num2[BIG_ENOUGH];
s = sscanf("1,2", " %[01234567] , %[01234567]", num1, num2);

当然这完全不安全,因为扫描的字符串加上终止的空值可能比缓冲区长,导致缓冲区溢出。

不幸的是,C类型系统无法区分指向字符数组开头的指针和指向单个字符的指针,因此编译问题中的代码。