snprintf
この関数には指定された長さが必要であり、コンパイラは範囲外チェックを実行するため、ターゲットの長さがすべてのパラメータの合計よりも長いことを確認する必要があります。ただし、次の手順を考慮してください:
このプログラム -Wall
を開くと、エラーが報告されます:
実際に境界を越える可能性があるため、このエラーは予期されています。そこで問題は、エラーを報告せずに同じ関数を完了するにはどうすればよいでしょうか?
私の gcc
バージョンは比較的新しい 7.1.1
です。古いバージョンのコンパイラではこのエラーは報告されないと推定されています。
まず
リーリーsnprintf()
的第二个参数代表的是缓冲区的大小,在这里应该是LENGTH
,sizeof(LENGTH)
的值是4(我猜你想写的应该是
sizeof(cache)
吧)。那么,改成snprintf(cache, LENGTH, "%s/ruaruarua", cache);
それで十分ですか?この例を見てみましょう:この例では、
リーリーbuf
の末尾に文字列を追加しようとしています。出力を見てください期待した結果が得られませんでした。どうしてこれなの?
snprintf()
のマニュアルには次のような文章があります:それでは、「元のコンテンツといくつかの新しいコンテンツを配列に出力」するにはどうすればよいでしょうか? 1 つの方法は、
それでは、バッファの末尾にデータを継続的に追加するにはどうすればよいでしょうか?snprintf()
に渡されるバッファを配列内の文字列の末尾に設定することです。 リーリー関数ファミリーの戻り値が印刷文字数 (印刷文字数) であることに注意してください。この場合、次のように呼び出すことができます:
結果はprintf()
リーリーリーリー