小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


【cppcheck】error: Undefined behavior: Variable 'buf' is used as parameter and destination in sprintf().

はじめに

C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。

error: Undefined behavior: Variable 'buf' is used as parameter and destination in sprintf().

cppcheckのバージョン
  • v1.89
サンプルプログラム

以下のソースプログラムを解析にかけると表示されます。

int main()
{
	char buf[5+1] = { 0 };
	sprintf(buf, "%s", "aaaaa");
	sprintf(buf, "%s", buf);  // error: Undefined behavior: Variable 'buf' is used as parameter and destination in sprintf().
	return 0;
}

上記のように、変数bufがsprintfの出力先とパラメタの両方に使用されていると、予期しない挙動(Undefined behavior)をするというエラーです。