【发布时间】:2017-01-06 03:41:11
【问题描述】:
我正在使用 scanf 来提取非常规则的表格数据。我需要分两遍复习它,并且有时可以安全地忽略一些论点。 我只想为我关心的字符串分配空间,为其他字符串分配一个“丢弃”字符串。如果我多次将此参数作为输出传递,是否定义了行为?
一个愚蠢的小例子:
char label[MAX_SIZE], discard[MAX_SIZE];
sscanf(input, "%s %s %s %s", discard, label, discard, discard);
【问题讨论】:
-
scanf()内的赋值是按顺序完成的,应该没有问题。 -
你为什么不使用赋值抑制操作符做
sscanf(input, "%*s %s %*s %*s", label);? -
因为我实际上是在将参数传递给一个在完成其他工作后提取字段的函数,所以有时我只想忽略这些字段。
-
@DavidC.Rankin 不使用
*的原因是处理sscanf()的返回值,以注意input的哪一部分被分配给@987654327 @ 在扫描不完整的情况下。 IOW,扫描成功了多少。 -
@DavidC.Rankin 我将其投票为受骗者,但不希望受骗者锤子,因为我希望需要额外的投票来同意或不同意。如果您认为合适,请投票重新开放。这似乎是标题问题的欺骗,但不是帖子正文的欺骗。