Bruce.さん < こん??は でび です
On Wed, 24 Dec 2008 00:30:54 +0900
"Bruce." <kbk@...> wrote:
> 気になるようなら、そのdefineを再度有効にするか、fopenを
> fopen_s に代えてください。引数と戻り値が微妙に異なるので注意が必要です。
#define _CRT_SECURE_NO_WARNINGS を入れても、なんだか同じエラーが出る
ようです。入れる位置が関係するのかも知れません。
スコープとかは、よくわからんので、fopen_sを使ってみることにしました。
originalは以下の通り。これだとwarning C4996: 'fopen'が出る。
fp = fopen(file, "rb");
if (fp == NULL)
error(ERR_READ);
書き換え版。
errno_t err;
if( (err = fopen_s( &fp, file, "r" )) !=0 )
{
error(ERR_READ);
}
MSDNの引数説明、書式をどうにかして欲しいですね。
ワザと理解しづらく書いているとしか思えん…。
でも、元のソースがシッカリしているので、言語を全く知らなくても
「多分、こんなことやってるんだろう。」と、流れを想像するだけで
どうにかなってしまうのがスゴイというか、恐ろしいというか…。
パソ通時代のプログラマは、やっぱり偉かったんだなぁ。
ところで、fopen_sを使うと、出力の改行がCR+CR+LF(0D+0D+0A)に
なっちゃいました。
後の方の出力指定をしている所が c == '\n' となっていたのを
c == '\r\n' としてみたり、色々試しましたが、どうも上手く
行きませんでした。
で、結局、バイナリで読むのを諦めて、"r"だけにしたら、あっさり解決。
文字コード周りはホントに難しいですね…。
でび http://davi.txt-nifty.com/1984/