:「形式の文字列リテラルではありませんし、フォーマット引数を持ちません」私はコンパイルエラー持た
libvncserver/main.c:245: error: format not a string literal and no format arguments
そしてライン245は、次のとおりです。bufが
fprintf(stderr,buf);
ある「CHAR buf [256]; "
私は245行目で何が間違っているのか分かりません。どうすれば修正できますか? その行をコメントアウトすると、プログラムがコンパイルされます。
'const char *'パラメータに 'char *'引数を指定するのは間違っていません。実際、それはかなり一般的で正常です。 'const char *'パラメータは、関数が引数文字列を変更しないことを約束します。呼び出し側が一定の引数を要求することはありません。 (回答の残りの部分は多少正確ですが、私はicktoofayの答えをより正確に考えています) – ibid
HarvardアーキテクチャのCPUで作業する場合、コンパイラは通常、リテラル文字列を命令メモリに格納します。書き込み可能なバッファはデータメモリに配置されます。この場合、パラメータをconst char *として宣言すると、コンパイラは命令メモリ(すなわちFLASH)からデータを読み込む命令を生成します。したがって、一般的には、関数がリテラルを期待する場合、書き込み可能なバッファを渡すことはできません。残念ながら、 'const char *'という言葉は、 '私はあなたのバッファを変更しません'と言っています...そして、それはここでの混乱の原因です。 – fabrizi0