C言語なら、俺に聞け! <31>
レス数が1000を超えています。これ以上書き込みはできません。
0001SHOW-A息子
NGNGいろいろな言語を極めたが、一番漏れになじんだのはCだった。
Cのことなら父をも超えた。疑問な点があったら漏れに聞け。
便所とメシ食ってる時以外は暇だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。あと、至急父に仕事を与えてやってください。
コンパイラ、過去ログなどのリンクは>>2-5 あたり
0951デフォルトの名無しさん
NGNGスレ違う。ここはファイル処理の堅牢性について話すスレだよ!!
0952デフォルトの名無しさん
NGNGatoiは使うなってことですか?
0953デフォルトの名無しさん
NGNGf g e t c で 1 文 字 づ つ 処 理 し ろ よ
0954デフォルトの名無しさん
NGNG0955デフォルトの名無しさん
NGNGCの知識も煽りのレベルも低いな。
テキストなら何でもfgetsの方がいいと思いこんでる奴は
馬鹿の一つ覚えのfgetsを使え。
この方が的確な煽りだろ?
確かにfreadは読み出し途中でエラーが発生すると読み込みを中断し、
fgetsは途中でエラーが発生しても中断はしない。
特に読み込みエラーになった場合にエラー場所から
リトライとかを行いたい場合、fgetsでは無理。
が、そんなケースの発生は希だし、今回のケースの場合は
せいぜいできることは何行目が読めないとかいうエラーメッセージを
出してプログラムを終了するぐらいだろ?
よって無理にfreadは使う必要など無い。
0956デフォルトの名無しさん
NGNG上司 VS 部下 でもって2chかよ おめでてーな
0957デフォルトの名無しさん
NGNGatoiのかわりにstrtolで。
そんなに面倒じゃないから、もっとstrtol利用していいと思うけど。マジで。
0958942
NGNGはあ?
お前はファイル内容が破損すると必ず読み込みエラーが
発生するとでも思ってんのか?
ファイル破損=メディアからの読み出しエラー
とは限らないんだが。
知ったかぶって書いた割にはレベルが低かったな。
たとえばバイト化けして'\0'が混じったらどうなる?
そういうことに対処するなら最初からfreadを使った方がマシ。
fgetsと比べてコーディングの手間がかかるわけでもない。
> 今回のケースの場合は
> せいぜいできることは何行目が読めないとかいうエラーメッセージを
> 出してプログラムを終了するぐらいだろ?
これも読み出しエラーしか想定してないのでボツ。
0959デフォルトの名無しさん
NGNG携わってたんだろうな。言わばテロに必要以上に怯えている今のアメリカみたいなもんか。
0960684
NGNGを立てませんか?(私は" 俺に聞け!"というレベルじゃないので立てれません。)
0961デフォルトの名無しさん
NGNGこいつ自分の使ってるブラウザにさえデータ破損を
考慮した処理が入ってることを知らないんだろうな (プ
0962デフォルトの名無しさん
NGNG0963959
NGNG0964fread提案者
NGNGどうぞお前ら fgetsでもfreadでもfgetcでもfscanfでも
好きなのを使ってください。
それでどうなろうが俺の知ったことか。
あと、仕事をください。
0965デフォルトの名無しさん
NGNGShow-Aたん?????
0966デフォルトの名無しさん
NGNG次スレよろしく〜
0968デフォルトの名無しさん
NGNG----------------------------------------------------
#include <stdio.h>
main () {
char buf[1024];
while (NULL != fgets (buf, sizeof (buf), stdin)) {
char name[1024];
int id, a, b;
float c, d, e, f;
int count = sscanf (buf, "%d,%[^,],%d,%d,%f,%f,%f,%f",
&id, name, &a, &b, &c, &d, &e, &f);
if (count != 8) continue;
printf ("id=%d name=%s (%d %d %f %f %f %f)\n",
id, name, a, b, c, d, e, f);
}
}
----------------------------------------------------
39341725,山田川,66,83,198.0,4584.3,0.0,0.0
39341726,-該当なし-,-,-,-,-,-,-
39341725,アイウエオ,66,83,198.0,4584.3,0.0,0.0
----------------------------------------------------
C:\WINDOWS\デスクトップ\c-test>a < str.txt
id=39341725 name=山田川 (66 83 198.000000 4584.299805 0.000000 0.000000)
id=39341725 name=アイウエオ (66 83 198.000000 4584.299805 0.000000 0.000000)
----------------------------------------------------
s c a n f マ ン セ ー !
0969955
NGNG> たとえばバイト化けして'\0'が混じったらどうなる?
freadと同じ動作をしますが何か?少なくともbccのfgetsは'\0'を読む。
お前、教えて君やってないで自分で試してみろよ。
ところでお前は'\0'が混じってるデータをテキストデータと呼ぶのか?
あんたファイルの仕組みを理解してないよ。
> fgetsと比べてコーディングの手間がかかるわけでもない。
1行のバイト数が変わってしまった場合は?
例えばftpでしくじって\r\nが\nに化けた場合。
> これも読み出しエラーしか想定してないのでボツ。
他のエラーって何?バイト化けして'\0'が混じったデータなら
freadでも文字列のチェックは必要だろ?
> 知ったかぶって書いた割にはレベルが低かったな。
お前がな、捨てハン付けてまで、馬鹿丸出しの発言するなよ。
0970よっしゃ
NGNG0971684
NGNGなるほど。sscanf一本でもいけるのですね。
しかしこんな書式知らなかった。
勉強になります。
0972968
NGNG%[^,]=カンマ以外の文字列、という意味。
俺も調べて初めて知ったんだけど、色々あるみたいだね。とっつきにくいけど
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html
こういう短い行ごとの処理なら、fgets+sscanfをうまく使えると思う
0973SHOW-A孫
NGNGgcc
http://gcc.gnu.org/
【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/
【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
0974デフォルトの名無しさん
NGNG貼る場所が違うぞ(藁
0975SHOW-A孫
NGNGちなみに新スレ
http://pc3.2ch.net/test/read.cgi/tech/1031905402/
0977デフォルトの名無しさん
NGNG最近は1週間で使い切るし。
0978名無しさん@Emacs
NGNG0979デフォルトの名無しさん
NGNGSHOW-Aのカリスマ性が関係してるとかしてないとか…
いや、関係はないわ ごめん
0980デフォルトの名無しさん
NGNG/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< えふりどえふりど!
\_/ \_________
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< えふりどえふりどえふりぃどぉ〜〜!
えふりぃど〜〜! >( ゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」
 ̄ / /
0981デフォルトの名無しさん
NGNGえいどりあん?
0982958
NGNGぎゃはは。全然意味がわかってないよお前。
> freadと同じ動作をしますが何か?少なくともbccのfgetsは'\0'を読む。
'\0'が混じった時に、どこまでが読み込んだデータの終端なのかを
どうやって判断するんだ?という意味なんだが。
(初心者が陥りそうな罠がまだ残ってるから反論には気をつけてね)
しかも'\0'というのは一例を挙げただけで、
もっと深刻な事態になる文字もあるわな。わかると思うけど。
だから
> そういうことに対処するなら最初からfreadを使った方がマシ。
> fgetsと比べてコーディングの手間がかかるわけでもない。
と書いてるんだよ。
> ところでお前は'\0'が混じってるデータをテキストデータと呼ぶのか?
> あんたファイルの仕組みを理解してないよ。
これはお話にならん。エラー時の話をしていたはずだが。
お前のところのテキストファイルは壊れようが何しようが
テキストデータしか存在しないのかもしれんが。
> 1行のバイト数が変わってしまった場合は?
> 例えばftpでしくじって\r\nが\nに化けた場合。
お前やっぱりファイルの仕組みを理解してないよ。
ファイルの破損とお前がftpを操作をしくじって
ファイル内容を書き換えるのでは意味が違う。
しくじった後のファイルは、あらかじめ決められた長さ
の固定長ファイルとは言えない。
0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNG他人のつくったソフトにfgetsを使っているところがあって、データを失うようなことになったら困るもんな(藁
0985デフォルトの名無しさん
NGNG0986エディタ製作中@クソ初心者
NGNG・・・今のままでいいのか、fread関数に変えるべきか・・・。
0987982
NGNG自分の性格が歪んでしまいそうなので辞退する。
>>969
ごめん。
この件について俺からはもう書くことは無いけど、
俺が間違ってたよ。
0988デフォルトの名無しさん
NGNG誰か教えれ。
0989デフォルトの名無しさん
NGNG固定長テキストエディタなんて要らんぞ
0990デフォルトの名無しさん
NGNGfread厨の言うことを真に受けるなよ。
0991エディタ製作中@クソ初心者
NGNGその辺は大丈夫です。
ちゃんと、メモリ資源がつづく限りテキストを読めるよう改造する予定ッス。
どんなに改造しても、
自分の窓を持たないエディタなんて他の人に使ってもらえそうにないですけど・・・(涙
それでも、勉強のつもりで自分の限界まで改造してみます。
>>990
う〜ん、fgetsで大丈夫なんですかね〜・・・。
上の方で、ファイルを読み込んだだけでファイルが壊れる事があるってありますけど・・・
マジッスか!?
うっかりバイナリとかをfgetsで読みに行ってファイル壊れるってことありませんよね?(汗
0992デフォルトの名無しさん
NGNG0993エディタ製作中@クソ初心者
NGNGですよね!
うん、安心しました・・・。
ありがとうございます。
0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG1000逝く前に言いたいことがあればどうぞ。
0997デフォルトの名無しさん
NGNGfread (buf, sizeof (struct res), 1001);
0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000955
NGNG> '\0'が混じった時に、どこまでが読み込んだデータの終端なのかを
> どうやって判断するんだ?という意味なんだが。
どこまでが読み込んだのかを判断する必要はない。
正しく読めたかを判断できればよい。
どっちにしろ堅牢なプログラムを作る必要があるのなら、
読み込んだデータは正しいフォーマットかどうかのチェックをするんだから
フォーマットのチェックで引っかかる。
> もっと深刻な事態になる文字もあるわな。
'\n'か?ところで、コントロール文字が化けるケースってあまり思いつかないんだけど
何するとコントロール文字が化けるの?
お前の作った糞プログラムを動かしたりするとか
> これはお話にならん。エラー時の話をしていたはずだが。
了解、テキストファイルが壊れてバイナリになってしまったケースだな
それならばなぜ
> しくじった後のファイルは、あらかじめ決められた長さ
> の固定長ファイルとは言えない。
とかぬかすんだ?自分で矛盾していること言ってることに気づいてないのか?
テキストファイルがバイナリファイルに化ける可能性は考慮して、
固定長ファイルの1レコード長が変わる可能性は考慮しないのか?
固定長ファイルの1レコード長が変わる可能性の方が遙かに高いと思うが?
freadの方が堅牢なんて恥ずかしい無知を晒した上に、
今度は自分の考えの浅さを露呈して楽しいか?
まぁ、世の中にはそういう変態がいることは知っているけどね。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。