0

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

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

你能告诉我解决方法吗?

4

1 回答 1

6

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 的值,以确保已读取某些内容并且没有发生错误。

于 2012-06-01T07:21:19.623 回答