我一直在尝试使用字符类使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
(或其他大于一个字节的类型),则可以按预期工作,但我会收到关于格式需要类型char*
的警告。
实际参数应该是什么类型,还是我犯了其他错误?
sscanf
实现中难道不是一个 bug 吗?根据文档,对于%c
,"没有空字符附加在末尾。" 然而,我没有找到任何描述类似%[...]
的参数的文档。 - Vlad%[
上找不到太多信息。我没有意识到字符类可以匹配一个类中的多个字符。我以为它像%c
一样。 - Evan%1[
。但是你仍然需要留出终止空字节的空间。 - R.. GitHub STOP HELPING ICE