当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);
}
}
最佳答案
首先,您应该知道转换规范中的m
是非标准的,所以您应该考虑使用它两次:您的代码将是不可移植的。
但是,如果您的实现支持m
,那么只要您将指针初始化到0
/NULL
,这种用法就安全了。scanf()
如果无法转换,并且free(0)
被指定为禁止操作(它总是安全的),则从不接触任何东西。