【问题标题】:sscanf - reading from empty stringsscanf - 从空字符串读取
【发布时间】:2012-06-06 10:28:38
【问题描述】:

当我将一个空字符串传递给sscanf 时,它会返回零并且不会更改给定的变量。

char* ptr = "";
abc = sscanf(ptr, "%s", output);
// abc == 0

你能告诉我解决方法吗?

【问题讨论】:

  • 发布真正的 C 代码,它可以与您期望的输出进行编译。
  • null 为 0。您期望 null 并得到它。
  • 他说他希望将 NULL 分配给 output 我猜。 0 是sscanf 的返回值。

标签: c io scanf string


【解决方案1】:

sscanf 等待第一个参数是 C 字符串,该函数将其作为检索数据的源来处理。将空字符串传递给此函数不能产生要初始化的变量,因为此函数不会使用任何内容对其进行初始化。

还要注意成功时,函数返回填充的变量数。如果发生匹配失败,此计数可以匹配预期的读数数量或更少,甚至为零。如果在成功读取任何数据之前输入失败,则返回 EOF。

以下代码,使用 MinGW (gcc-core 4.5.0-1) 编译

char str[10];
int ret = sscanf("", "%9s", str);
printf("%d\n", ret);

输出-1 (EOF)

检查sscanf 是否成功的好方法是检查它的返回值是否真的等于提供的变量的数量。在这种情况下,它将是if (ret == 1)。虽然很多人只是检查是否返回了大于 0 的值,以确保读取了某些内容并且没有发生错误。

【讨论】:

    最近更新 更多