sscanf - 从空字符串中读取

Tam*_*min -1 c string io scanf

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

char* ptr = "";
abc = sscanf(ptr, "%s", output);
// abc == 0
Run Code Online (Sandbox Code Playgroud)

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

Lih*_*ihO 5

sscanf等待第一个参数成为函数处理C字符串,以检索数据.将空字符串传递给此函数不会产生要初始化的变量,因为此函数不会将其初始化.

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

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

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

输出-1(EOF)

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