sscanf()
がフォーマット文字列に2つの "%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: '[...] scanf()が呼び出された場合は、free(3) ' –
@AndreKamplingが必要かどうかは疑問でした。 OPはどんな場合でもそれを行うことが安全かどうかを尋ねていた。 –