プロが教えるわが家の防犯対策術!

stadio.hの中にバッファが定義されていると思うのですが、プログラムにおいて、バッファはどこにあるのでしょうか?教えて頂けると幸いです。

質問者からの補足コメント

  • うーん・・・

    本の内容です。ファイル名stadio.hは標準的な入出力に必要なバッファなどが定義されたファイルです。という所です。教えて頂けると幸いです。

    No.3の回答に寄せられた補足コメントです。 補足日時:2023/10/25 11:28

A 回答 (7件)

前にも答えてるんだけど



https://oshiete.goo.ne.jp/qa/13302194.html

> 本の内容です。ファイル名stadio.hは標準的な入出力に必要なバッファなどが定義されたファイルです。という所です。教えて頂けると幸いです。

それは、具体的にどこの出版社の何て本で、著者はだれで、その記述は何ページにあるのですか?
「ファイル名stadio.hは標準的な入出力に必要なバッファなどが定義されたファイルです。」というのは本の記述の通りなのですか?
    • good
    • 0

皆さんでワイワイ楽しそうですね。


google検索で「stadio.hの中にバッファが定義されていると思うのですが、プログラムにおいて、バッファはどこにあるのでしょうか」をキーワードに検索すると...

https://detail.chiebukuro.yahoo.co.jp/qa/questio …

に於いて、『stdio.h は、標準的な入出力を行う場合に必要なバッファなどが定義されているファイルです。という文章で、などをついていますが、バッファ以外に何が定義されているのでしょうか?』なる質問が見つかります。
この質問のベストアンサーを獲得した回答者が挙げる2番目のurlを辿ると、次のマクロが見つかります。

#define BUFSIZ 8192

マクロの説明には「setbuf() で使用するバッファのサイズ 」と書かれています。確かに同じurl中の『ファイルアクセス関数』の中にsetbuf()関数が見つかります。そこでもう一度google検索で「stdio.h setbuf()」をキーワードに検索すると...

http://www9.plala.or.jp/sgwr-t/lib/setbuf.html

などがヒットします。詳細は中身をご参照いただきたいのですが、抜粋すると『...setbuf関数を用いると、自動的に割り当てられる入出力バッファの代わりに、bufで指定した領域を使うことができます。bufのサイズはstdio.hでマクロ定義されている「BUFSIZ」を用いて下さい。また、bufに「NULL」を指定すると、バッファリングされず、直ちにデバイスやファイルに出力されます。setbuf関数は、setvbuf関数の簡略形です。※setbuf関数はfpをオープン直後かfseekをした直後に用いないと思わぬエラーの原因になるようです。』と書かれています。
以上から判明することは次のとおりです。

●stdio.hファイルで記述される"バッファ"とは、オープン済みの"ストリーム"が利用するバッファを調整するためのもので、エンドユーザ(C言語開発者)が一般的に利用する"バッファ(メモリ)"を提供するものではありません。ストリームにかなりニッチな機能を付加するための(私には使い方がちょっと思い浮かびません。)機能に思われます。

●一番上に示したurlは"Yahoo知恵袋"に於いて、2022年11月に恐らくご質問者様ご自身で発した質問と思われます。それに対する回答は大変的確で丁寧な回答だと思われるのですが、これの何処が不明点であったのか、ご質問者様ご自身で明確にしていただかないと、今後どれだけ繰り返しご質問なさっても進展を期待できないのではないかと思われます。
    • good
    • 1

もしかして、BUFFERみたいなものがあって、それを使ってメモリーから割り当てられると思いこんでるなら、そんなのはないです。

    • good
    • 0

勘違いしてますね。



printfやscanfがどういう処理を行うかを考えればわかりますが、関数内で必要となるメモリーを自動で割り当てて、処理が終われば解放するように作っています。

つまりこれら関数が使っている間のバッファーはそもそも呼び出せません。

なぜあなたはそのバッファーを使いたいのでしょうか?
意図的にメモリーを割り当ててデータの読み書きに使うならmallocなどを使うのが普通です。
    • good
    • 0

プログラミング言語の原理もわかってないんじゃないですかね?



最終的に実行プログラムにする際に、まずコンパイルとリンケ-ジを行って機械語のプログラムにします。

その上でコンピューター上でプログラムを実行する際にメインメモリーにプログラムを保存して、必要な命令をそこから取り出して実行します。

その時点で別途関数のためにバッファーを用意する必要もメリットもありません。

stdio.hのバッファーの話はどこから聞きましたか?
この回答への補足あり
    • good
    • 0
この回答へのお礼

では、あなたのいうバッファとは何でしょうか?簡潔に教えて頂けると幸いです。

お礼日時:2023/10/25 14:41

ないです。



バッファーとしてメモリーの一部から確保したいならmallocなどを使います。
    • good
    • 0
この回答へのお礼

stdio.hから必要な関数をバッファにコピーして、その関数が使う時になったら、使って、また、バッファに戻すという感じでしょうか?教えて頂けると幸いです。

お礼日時:2023/10/25 10:37

誰かが準備してくれている訳ではなく自分で定義して確保するのです

    • good
    • 0
この回答へのお礼

stdio.hから必要な関数をバッファにコピーして、その関数が使う時になったら、使って、また、バッファに戻すという感じでしょうか?教えて頂けると幸いです。

お礼日時:2023/10/25 10:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています