sscanf - 从空字符串中读取

时间:2012-06-01 07:07:23

标签: c io scanf string

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

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

你能让我知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:5)

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