[過去ログ]
【初心者歓迎】C/C++室 Ver.102【環境依存OK】 (1002レス)
【初心者歓迎】C/C++室 Ver.102【環境依存OK】 http://mevius.5ch.net/test/read.cgi/tech/1509780815/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
716: デフォルトの名無しさん [] 2018/05/05(土) 10:57:39 ID:dx2uIifv file.read((char*)buf, sizeof buf); は buf のサイズ分だけ読み込めということだと思います。 ファイルの最後の部分を読み込むとき、サイズが WIDTH 未満の場合にはどうなるのでしょうか? fstream file; file.open("hello.txt", ios::in | ios::binary); do { unsigned char buf[WIDTH]; file.read((char*)buf, sizeof buf); for (int i = 0, size = file.gcount(); i < size; ++i) { printf("%02X ", buf[i]); } cout << endl; } while (!file.eof()); file.close(); 👀 Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) http://mevius.5ch.net/test/read.cgi/tech/1509780815/716
718: デフォルトの名無しさん [sage] 2018/05/05(土) 11:22:41 ID:dx2uIifv >>717 ありがとうございました。 あともう一つ質問させてください: ロベールの本なのですが、 int n = 0x41424344; file.write((const char*)&n, sizeof n); というコードがあるページにあります。 その少し後ろのページには、以下のコードがあります。 char buf[BUF_SIZE]; dst.write(buf, src.gcount()); ここで、なぜ dst.write((const char*)buf, src.gcount()); としていないのでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1509780815/718
721: デフォルトの名無しさん [] 2018/05/05(土) 11:58:03 ID:dx2uIifv すみません。もう一つ質問です。 またロベールの本なんですが、以下のコードが書いてあります。 ファイルから入力中にエラーが起きたときの対処法です。 if(src.fail()) { ではなく、 if(src.fail() && ! src.eof()) { と書いてあります。その理由として、 「読み込みの場合はファイルの終端に到達した際も fail メンバ関数が 真となるため、 eof メンバ関数が真になる場合は除外しておきます。」 と書いてあります。 そこで質問です。 ファイルの終端の直前の部分を読み込む最後の読み込みの際に何等かのエラーが起こった場合、 src.fail() == true かつ src.eof() == true となります。 そのため、 src.fail() && ! src.eof() == false となってしまいます。 この場合、読み込みエラーが起こったにもかかわらず、その対処ができないことになりはしないでしょうか? それともロベールさんのコードはOKなコードなんでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1509780815/721
722: デフォルトの名無しさん [] 2018/05/05(土) 11:58:46 ID:dx2uIifv fstream src; … char buf[BUF_SIZE]; src.read(buf, sizeof buf); if(src.fail() && ! src.eof()) { error = true; break; } http://mevius.5ch.net/test/read.cgi/tech/1509780815/722
723: デフォルトの名無しさん [sage] 2018/05/05(土) 12:03:26 ID:dx2uIifv >>720 ありがとうございます。 つまりどちらもエラーにはならないということですね。 ですが、記述が統一していない理由というのは何か考えられるでしょうか? int n = 0x41424344; file.write((const char*)&n, sizeof n); に const がついているのは、 n は int 型だから write に渡すときには絶対に キャストしなければならない。(char *) でもいいが、どうせなら const もつけて しまおうということですかね? 一方、 char buf[BUF_SIZE]; dst.write(buf, src.gcount()); の方は、キャストの必要がないからわざわざ (const char*) とキャストすることも ないかなという感じですかね? http://mevius.5ch.net/test/read.cgi/tech/1509780815/723
724: デフォルトの名無しさん [sage] 2018/05/05(土) 12:05:14 ID:dx2uIifv ロベールさんの本は色々細かいことが書いてあって有用なのですが、なぜこういうコードなんだろう?という 疑問を持って読んでいくと次から次へと疑問が生まれてきて読み進むのが大変です。 http://mevius.5ch.net/test/read.cgi/tech/1509780815/724
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.048s