簡體   English   中英

是否定義了帶有“NULL”格式字符串的“sprintf”行為?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM