当sscanf()
在格式字符串中获得两个“%ms”时。
当sscanf()
返回0或1时,为两个目标指针调用free()是否安全?就像在下一个函数中一样:
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);
}
}
答案 0 :(得分:4)
首先,您应该知道转化规范中的m
非标准,因此您应该考虑使用它两次:您的代码将是不可移植的。
但是,如果您的实施支持m
,只要您将指针初始化为0
/ NULL
,此用法就是安全。当scanf()
被指定为 no op (它总是安全的)时,free(0)
永远不会触及任何内容。