当sscanf()
在格式字符串中获得两个“%ms”时。 当sscanf()
返回0或1时,为两个目标指针调用free()是否安全?例如下面的功能:sscanf和多个%ms
void foo(const char* text)
{
char* key = NULL;
char* value = NULL;
int count = sscanf(text, "%ms %ms", &key, &value);
if (count == 2)
{
...
}
free(key);
free(value);
}
或者可以在以后的目标指针(value
)有一些垃圾的价值?需要 而下面的清理:
void bar(const char* text)
{
char* key = NULL;
char* value = NULL;
int count = sscanf(text, "%ms %ms", &key, &value);
if (count == 2)
{
...
free(key);
free(value);
}
else if (count == 1)
{
free(key);
}
}
阅读下面的示例和解释:https://linux.die.net/man/3/sscanf:[[...]只需要调用free(3)如果scanf()调用成功读取一个字符串。“# –
@AndreKampling但问题不在于它是否有必要*。 OP在询问在任何情况下是否安全。 –