我正在尝试使用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
但是我的问题是,在“简单”值之后的 尾随 字符被默默地忽略了。
ACTUAL : arg = "simple:2GARBAGE" --> opt = SIMPLE val = 2
DESIRED: arg = "simple:2GARBAGE" --> ERROR!!!
有没有一种简单的方法可以让sscanf报告尾随的垃圾?或者,由于我已经读过“scanf is evil”,是否有一个简单的(最好是一行)替代方案来解决上述问题?
scanf()
是有害的。sscanf()
不是scanf()
,如果使用得当,它可以正常工作。对scanf()
最大的问题之一是它将 I/O 与解析结合在一起,当出现问题时,很难重新确定在 I/O 流中继续的位置。sscanf()
只进行解析,不执行 I/O。 - chux - Reinstate Monica