[英]Is the behavior of `sprintf` with a `NULL` format string defined?
一個初級同事寫了這樣一段話:
char str[20] = "Normal"; // declared globally
void somefunc(void)
{
sprintf(str, NULL);
if (var == TARGET)
{
sprintf(str, "Set");
}
else
{
sprintf(str, "Normal");
}
}
除了推薦使用snprintf
之外,我還在考慮sprintf
會對NULL
格式字符串(在 func 的第一行)做什么——不是NULL
值字符串,而是格式控制本身。 我在閱讀的文檔中沒有看到任何內容。
這是否包含在標准中,或者是否定義了實現? 由於他顯然正在運行此代碼,因此它一定不會在此處導致分段錯誤(取消引用NULL
),但這是標准嗎? 有什么我可以指出的,說“不要這樣做。”,或者它可能是完全安全的(根據標准/定義)?
充其量這似乎是一個不必要的聲明,但最壞的情況是我擔心另一個編譯器可能會導致段錯誤......
這樣的調用會調用未定義的行為,因為(7.21.6.1 fprintf 函數;這對 sprintf 有效)
3 格式應為多字節字符序列...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.