![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.2ベストアンサー
- 回答日時:
>終わったらそれで戻そうかと思ったりもしていたので助かりました。
実際には、元のバッファが使われるワケではない(使われるかもしれないけど)と思いますが、
もし、元と同じ領域のバッファじゃなくても、特別問題があるとは思えません。
ただ、setvbufが成功したかどうかは調べる必要があると思います。
>バッファへのポインタをsetvbufを使う前に保存して…
バッファの領域が固定ならそれでいいと思いますが、
もしかしたら、mallocで初期化プログラムで確保されていて、
setvbufした時に解放されているかもしれませんから、
(コンパイラの)実装によっては危険だと思います。
No.3
- 回答日時:
> 入力する場所がbufに変わるのでしょうか?
入力する場所というのが何を想定しているのか分かりませんが、たぶん違うと思います。
setvbufやsetbufでストリームのバッファを変更しても、結び付けられているファイル等の入出力先が変わるわけではありません。
例えば、コンソールへの出力であれば行バッファリング(_IOLBF)で構いませんが、シリアルポートに出力するのであれば、バッファリングなし(_IONBF)にしておかないと、何か書き込むたびにfflushでバッファをフラッシュしなければ、期待した動作になりません。そういった状況に合わせて適切な制御を行うために、これらの関数は使われます。
> もしそうだとして、stdinを元に戻す方法はどうしたらいいのでしょう?
外しているかもしれませんが、例えばstdinをコンソールではなく、ファイルに結びつけるために変更したいのであれば、freopen関数を使用します。
この回答への補足
>入力する場所というのが何を想定しているのか分かりませんが・・・
これは入力のために文字を一時的に保存するバッファがbufに切り替わるのかと聞きたかったのですが・・・
確かに文章が短すぎて、聞き方により別のとらえ方も出来ますよね。
>外しているかもしれませんが・・・
勉強のために読んでいただけなので特に外しているとかはありません。
ただsetvbufはのちのち役に立ちそうだと感じたのできちんとわかっていたほうがいいと思ったので・・・
No.1
- 回答日時:
多分、バッファサイズを変更してやることで、入出力の効率を良くする目的で使われるのだと思います。
変更したモノを元に戻すには、
setvbuf(stdin,NULL,_IOLBF,BUFSIZ)
としてられば、自動的に標準サイズのバッファが割り当てられます。
BUFSIZは、stdio.hで定義されているstdio用のバッファサイズです。
お返事ありがとうございます。
本には「NULLを設定したら自動的に領域を割り当てる」と書いていたので、「どの領域を?」とか思っていたのですがそれでしたか。
出来なかったらstdinのバッファへのポインタをsetvbufを使う前に保存して、終わったらそれで戻そうかと思ったりもしていたので助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) VBA エクセル 条件の設定 1 2022/03/28 10:24
- Visual Basic(VBA) findメソッドの変数について 6 2023/06/23 08:01
- C言語・C++・C# 略語の読み方について 2 2023/05/25 12:35
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スレッドセーフでないAPIをマル...
-
VC++でUTF-8のファイルを出力し...
-
ラストです!! このプログラム...
-
コマンドライン引数の区別【C言...
-
VBSでEXCEL⇒CSV変換で日付の書...
-
MATLABのCSV形式での書き込みに...
-
VBA でメモ帳へ保存する際の保...
-
井戸型ポテンシャルの数値解シ...
-
コマンド(例えばls)の出力結果...
-
フォルダー、ファイル名を一括...
-
VBScriptのReadTextについて
-
Fortoran
-
Accessでのレポート印刷待機方法
-
構造体のファイル出力
-
CADの無い環境の得意先に図面を...
-
複数のC言語プログラムが,一つ...
-
テキストファイルを標準出力し...
-
TeXで使用するFONTを作成しよ...
-
マイクラでPythonのプログラミ...
-
パラメータが正しくありません...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Paiza Cloudです。 どうやれば...
-
Paiza Cloudです。学籍番号と氏...
-
Acccess レポートをグループ別...
-
ファイル出力の場所を指定
-
コマンド(例えばls)の出力結果...
-
VC++でUTF-8のファイルを出力し...
-
テキストファイルに改行コード...
-
シェルコマンドの 2>&1 とはど...
-
VBA でメモ帳へ保存する際の保...
-
ファイル形式またはファイル拡...
-
fortranのtxtファイル出力書式...
-
CSV形式に変換
-
printfだと出力されるのにfprin...
-
C++ fprintf_sの使い方がわからん
-
c言語の質問です。 ランダムに4...
-
Wordマクロで指定したフォルダ...
-
C++/CLIにて、System.String^型...
-
pcap形式データをテキストへ抽出
-
二次元配列をクリップボードに...
-
raw形式からbmp形式への書き込...
おすすめ情報