はじめに
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)をするというエラーです。