【发布时间】:2018-11-27 06:41:29
【问题描述】:
我有一个文件,其中某些字段由制表符分隔。一行中总是有 12 个选项卡,某些选项卡是连续的,表示一个空字段。我想使用 fscanf 将连续的选项卡读取为空字段并将它们存储在一个结构中。但是好像有问题。这是我的文件:
usrid User Id 0 15 string d k y y 0 0
当我尝试使用 fscanf 进行读取时,一个又一个选项卡不会被识别为空字段,并且数据存储在错误的结构字段中。处理问题的最佳方法是什么?
【问题讨论】:
-
有一个固定的分隔符,你应该完全避免
fscanf。使用fgets阅读该行并使用strtok对其进行标记。 -
@DYZ - 您不能使用
strtok,因为它将连续分隔符视为单个字段,但strsep将处理空字段。 -
@DavidC.Rankin 够公平的。
strsep是。 -
strtok应在下一个标准版本中删除。如此愚蠢的界面:( -
@AnttiHaapala:在许多方面它会很好,但他们也应该删除
strtok_s() from Annex K. Either the Microsoftstrtok_s()` 或 POSIXstrtok_r()接口就可以了——它们本质上是等价的(但是附件 Kstrtok_s()有 4 个参数,而 MS 和 POSIX 只有 3 个)。
标签: c