<分区>
我正在尝试使用 sscanf
进行简单的测试和转换,但我遇到了一个问题,它忽略了字符串中的尾随垃圾。我的示例代码是:
char *arg = "some user input argument";
int val = 0;
if (sscanf(arg, "simple:%d", &val) == 1) {
opt = SIMPLE;
} else if (strcmp(arg, "none") == 0) {
opt = NONE;
} else {
// ERROR!!!
}
这适用于预期的输入,例如:
arg = "simple:2" --> opt = SIMPLE val = 2
arg = "none" --> opt = NONE val = 0
但我的问题是“simple”值之后的尾随字符被默默忽略
ACTUAL : arg = "simple:2GARBAGE" --> opt = SIMPLE val = 2
DESIRED: arg = "simple:2GARBAGE" --> ERROR!!!
让 sscanf 报告尾随垃圾的简单方法是什么?或者,既然我读过“scanf is evil”,是否有一个简单的(最好是 1 行)替代 sscanf
来解决上述问题?