私は今cを学んでおり、ポインターを使用してテキストを印刷できるこの例を思いつきました。
#include <stdio.h>
main ()
{
char *quotes = "One good thing about music, when it hits you, you feel no pain. \"Bob Marley\"\n";
printf(quotes);
}
コンパイラから「フォーマットは文字列リテラルではなく、フォーマット引数はありません」という警告が表示され、プログラムを実行すると正常に実行されます。
ここで、コンパイラから同じ警告が表示されたという他の質問をいくつか読みましたが、自分に合った答えが見つかりませんでした。このメッセージが表示される理由がわかりました。
この警告は、printf スタイル関数 (printf、fprintf など) への書式文字列引数を検証できないことを gcc が通知する方法です。この警告は、コンパイラが手動で文字列を覗いて、実行時にすべてが意図したとおりに進むことを確認できない場合に生成されます...
ケース 3. これはややあなたのケースです。実行時に生成された文字列を取得して、印刷しようとしています。表示される警告は、文字列に書式指定子が含まれる可能性があるというコンパイラの警告です。たとえば、「bad%sdata」と言います。この場合、ランタイムは存在しない引数にアクセスして %s と一致させようとします。さらに悪いことに、これはユーザーがプログラムを悪用しようとしている可能性があります (読み取るのが安全ではないデータを読み取ります)。 (答えを見てください)
しかし、コンパイラからの警告を受けないようにするために、私の場合に何を追加する必要がありますか?