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

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


您能告诉我解决的方法吗?

最佳答案

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

关于c - sscanf-从空字符串读取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10845904/

10-13 08:27