何も指すファイルポインタ(ファイル*)がありますか?
-
29-10-2019 - |
質問
何らかの理由で何も指すファイルポインタ(ファイル*)が必要です。これは、FPRINTF関数に渡すことができ、fprintfはファイルポインタを無視します。
例えば:
void my_function()
{
FILE* nothing = NULL; // NULL is not correct.
int n = fprintf(nothing, "PI = %f", 3.14); // Note: When nothing = NULL, error ocured.
}
.
何も指すファイルポインタ(ファイル*)はありますか?
解決
いいえ。
あなたのコードは実行時の例外を引き起こします。サポートされているOS上で実行している場合は、/dev/null
を使用できますが、C ++で組み込みのようなものは何もありません。
他のヒント
実際の問題を解決するために(コメントに記載されている)、C ++実装で使用可能である場合は、snprintf
の代わりにprintf
を使用します(C ++ 03では保証されていません)。バッファのNULLポインタを渡し、サイズに0を渡します。何も書かれていませんが、戻り値はフォーマットされた文字列の長さです(NULターミネータを除く)。
[編集:おっと、Windows上のsnprintf
がC99に準拠していないことを忘れました。必要な長さではなく、切り捨てが発生した場合はエラーを返します。C ++ 0xがC99準拠のsnprintf
を必要とするという事実について何をするつもりはわかりません。]
あなたの質問に答えるために、Windows上のUnixのようなシステムまたは/dev/null
でnul
をFopenすることができます。結果のFILE*
に書き込みは効果がありません。ただし、ポータブルNULLデバイスはありません。
if (NULL != nothing)
ステートメントでFPRINTFメソッド呼び出しをラッピングしないのですか?
NirMHが言ったように、それをif (nothing != NULL)
で囲むことができますが、別の方法があります。ファイルを読み取りモード("r"
を使用)で開くことができ、fprintf
に送信すると、書き込みは無視されます(編集:コメントで説明されているように、n=0
によって返されるように負の場合は、fprintf
を設定することを忘れないでください)。>
私は個人的に最初の方法を提案します。2番目を行う唯一の理由は、機能を変更できない場合です。
コードがシステムに依存しているかどうかを気にしない場合は、Linuxでは/dev/null
、Windowsではnul
などを使用できます。
設計ミスを犯しています。
明らかに、知りたいのは、数字を書くのに必要な文字数です。
そのために_ * printf_を使用しています。これは良い考えです。 「書き込まれた」文字の数を計算したいだけなので、必要です。ただし、何も表示したくないので、 printf だけでなく fprintf を刺しました。ただし、 fprintf は、書き込むファイルがないと機能しません...
スティーブが言ったように、 snprintf()を使用する必要があります。これはメモリ内の文字列に書き込みます。
steveが言うように、NULL文字列を指定した snprintf は、Windowsを除いて意図したとおりに機能するはずです。次に、Windowsで、後で破棄する一時的な文字列を提供します。 ジェネラコディセタグプレ
次に、電話するだけです: ジェネラコディセタグプレ
(この関数は、何かを表示するために必要なサイズを計算するように拡張できますが、今は単純にしておきたいと思います。)