« VBScriptでバイナリファイルを読み書きする | Main | 「ひとつ、村上さんでやってみるか」/村上春樹 »

最初からCで書いておけば・・・

で、さっき、久しぶりに「Practical C」をぺらぺらめくって、さっきのVBScriptのC版を書いてみました。

#include <stdio.h>

int main(int argc, char **argv){ char buffer[1024]; char sCrLf[2]; FILE *fIn,*fOut; int rlen; sscanf(argv[3],"%d",&rlen); sCrLf[0] = 13; sCrLf[1] = 10; fIn = fopen(argv[1],"rb"); fOut = fopen(argv[2],"wb"); while(fread(buffer,1,rlen,fIn) == rlen){ fwrite(buffer,1,rlen,fOut); fwrite(sCrLf,1,2,fOut); } fclose(fIn); fclose(fOut); return (0); }

最初はgetc,putcでやる方法を考えていたんですが、せっかくだからCっぽくfreadで。実行するまで、引数の一つめがargv[0]ではなくて、argv[1]に入ることをすっかり忘れていました(笑)

|
|

« VBScriptでバイナリファイルを読み書きする | Main | 「ひとつ、村上さんでやってみるか」/村上春樹 »

パソコン・インターネット」カテゴリの記事

Comments

このプログラム、ファイルサイズが第3引数の倍数になっていなかったら最後の行を取りこぼすぞ。
後はバイナリ読むならreadシステムコールのほうが基本だ。charの配列はbadだ。Cなら
char* crlf = "\r\n";
だ。ポインタを使わずしてCを語ることなかれ(笑
後はJavaでね、実行クラス名を取るのに一瞬悩むんだよね。

Posted by: こ | December 09, 2006 at 08:21 PM

> このプログラム、ファイルサイズが第3引数の倍数になっていなかったら最後の行を取りこぼすぞ

まあ、それはいいかな。一つ前の記事のnacへのコメントの通り、これはホストの固定長レコードなDSのダンプをExcelに突っ込むためのものなので、なんか足りない物がついてたら、ポイっと(笑)

それより、読み込みに存在しないファイル名を指定すると、core(笑)。LLだったら、まあ、インタプリタのエラー見て気がつくからエラー処理なくてもいいかと放置するけど(特に、こういうちょっとしたツール類なんかは)、Cは何となくそうはいかんところが、激しくめんどい。

> charの配列はbadだ。Cなら
> char* crlf = "\r\n";
> だ。ポインタを使わずしてCを語ることなかれ(笑

それをすると、sizeof(crlf)が3になって、ヌル文字1バイトメモリを損するから・・・という発想がBADだ!(笑)。

それに、\r\nが使えることを覚えてなかったというのもある。\nは0x0D0Aにどっかで変換されるんだっけ、どうだっけ・・・とか考えるのもやだった。キッパリ数字で(笑)。そのへん、なんか、処理系で変わりそう。read使わなかったのもそのため。read使った瞬間cygwin.dllがないと動かなくなったり・・・とかないのかな?ないか(笑)

しかし、そのあたり、久しぶりにCを書こうとすると、ものすごくBADなことに気を遣わなきゃいけなくなるよねえ。

ちなみに最初、fopen(path,"rb")をfopen(path,"br")と書いていて、SEGVって悩んだ。そんなのコンパイルのときに教えてくれよ~(T-T)

とにかく、もう20行を越えるCはやだな

Posted by: Tambourine | December 09, 2006 at 09:41 PM

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/47905/12990770

Listed below are links to weblogs that reference 最初からCで書いておけば・・・:

« VBScriptでバイナリファイルを読み書きする | Main | 「ひとつ、村上さんでやってみるか」/村上春樹 »