const char* abc = "foo";
printf(abc);
これは安全ですか適切ですか?私はこれを含むいくつかのレガシーコードを見た。 ありがとう!C++ printf質問:どうすればchar *をprintfに安全に渡すことができますか?
は非常に非常にsorry..Iがミスを犯し、私は、これは安全ではありません....バック
const char* abc = "foo";
printf(abc);
これは安全ですか適切ですか?私はこれを含むいくつかのレガシーコードを見た。 ありがとう!C++ printf質問:どうすればchar *をprintfに安全に渡すことができますか?
は非常に非常にsorry..Iがミスを犯し、私は、これは安全ではありません....バック
それを変更しました。 abc
が有効な文字列(現在はそうではない)を指していると仮定すると、この種のパターンはフォーマット文字列の脆弱性の影響を受けやすい可能性があります。 Format string attacks
編集:私はあなたの質問にコードを修正したことがわかります。これは、printf
の最初の引数としてabc
を渡していましたが、これは本当に悪いことです。最初の引数"%s"
を作成したので、はるかに優れています。これらの2つは似ていないし、セキュリティに大きな違いがあるので、あなたのレガシーコードでこのパターンを探します。
彼はコードを修正しましたが、私はあなたの答えはまだ関連性があると思います。 – Muggen
私はあなたのabc
が何もなく実際の文字列を指していると仮定しています。サンプルコードを整理すると便利です。
これまで静的な文字列を書き出すためにこれを行いましたが、問題は発生しませんでした。振り返ってみると、私は運が良かった。正しいことが、それはおそらくのようになります。
const char* abc = "foo";
printf("%s", abc);
ええ、ありがとう。あなたは正しいです –
ご質問に限られたコードの断片から
を伝えるのは難しいけど、依存.... printfの書式文字列としてそれを印刷します... ..soであれば、それはOKになります任意のフォーマット文字列の特殊文字を使用していないよう...
const char* abc = "foo";
printf(abc);
のために、私は変数ABCを導入しない理由を見ることができない、2理由ラインはとてもクローンですse。
abcがconst文字列ポインタでない場合、これは非常に危険です。 printfはタイプセーフではない引数リストに依存しているため、非常に簡単にクラッシュする可能性があります。
参考までに、コードを書式設定していただければ幸いです。 –
私はその行の後にセミコロンがあると仮定していますか? – James
正しい場所にいくつかのセミコロンも役立ちます。 –