我需要使用以下格式解析c中的字符串"foo =%d",我需要检查格式是否正确并读取int值.
我的初始代码是:
int foo_set = 0;
int foo;
if (sscanf(text, "foo=%d", &foo) == 1)
foo_set = 1;
Run Code Online (Sandbox Code Playgroud)
但是代码应该拒绝输入,例如"foo = 5 $%£".这段代码会起作用吗?
int foo_set = 0;
int foo;
char control;
if (sscanf(text, "foo=%d%c", &foo, &control) == 1)
foo_set = 1;
Run Code Online (Sandbox Code Playgroud)
使用该control字符代码检查没有额外的输入.有没有更好/更正确的方法来做到这一点?
谢谢
使用%n格式说明符确定处理结束的位置,并检查它是否与字符串的长度匹配:
const char* text = "foo=4d";
int pos;
int foo;
if (sscanf(text, "foo=%d%n", &foo, &pos) == 1 &&
pos == strlen(text))
{
/* Valid as all of text consumed. */
}
Run Code Online (Sandbox Code Playgroud)
nC99标准中格式说明符的说明:
没有输入消耗.相应的参数应该是一个指向有符号整数的指针,到目前为止,通过调用fscanf函数将写入从输入流中读取的字符数.执行%n指令不会增加fscanf函数执行完成时返回的赋值计数.没有参数被转换,但是消耗了一个参数.如果转换规范包括赋值抑制字符或字段宽度,则行为未定义.
请参阅https://ideone.com/d1rhPf上的演示.
| 归档时间: |
|
| 查看次数: |
809 次 |
| 最近记录: |