使用fscanf来解析文件

Ibr*_*med 2 c c++ parsing scanf

我正在解析包含这样的模式的文件

[0] [NAME] [描述]

我在用 fscanf(fp, "[%d][%s][%s]", &no, &name, &desc)

并获取这些值no = 0和name = NAME] [DESCRIPTION]和desc = junk.我尝试在[0]和[Name]之间添加空格,结果为no = 0和name = NAME]我在这里做错了什么?

chu*_*ica 7

更换都%s%[^]\n].将%s被消耗],并且您需要限制name到允许的字符.

在这里],\n不允许放入name.您可能希望%[A-Za-z_ ]限制name为字母,_和空格.


相关改进:
用于避免超出的长度说明符.
考虑fgets()sscanf()vs 配对fscanf().

  • `[`或扫描集转换是在C89中引入的. (3认同)
  • 这是不寻常的,但是c11说"如果转换说明符以[]或[^]开头,则右括号字符位于扫描列表中,下一个右括号字符是结束规范的匹配右括号;",它编译好的,按预期工作. (2认同)
  • 可能很高兴提到`%[`,就像`%s`一样,没有长度说明符是危险的. (2认同)