當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在詢問在任何情況下是否安全。 –