作者: davi
日時: 2008/12/24(04:53)
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/