Tam*_*min -1 c string io scanf
当我传递一个空字符串时sscanf,它返回零,并且它不会更改给定的变量.
char* ptr = "";
abc = sscanf(ptr, "%s", output);
// abc == 0
Run Code Online (Sandbox Code Playgroud)
你能让我知道如何解决这个问题吗?
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的值,以确保已读取某些内容并且没有发生错误.