作者: davi
日時: 2008/12/23(06:36)
みなさん  <  こん??は でび です

Visual Studio2003のコマンドライン用のcpp(だけ)を拾ってきて、
Visual Studio2005で新規プロジェクトを作成し、2005の方でデフォルトで
できたcppを2003の方のcppで上書きしてから、新しい書き方になったために
出てくるらしいエラーを一個ずつ潰して行っている所なのですが、
あと一個だけ、エラーが潰せません。

# よくわからんままやっていますが、int _tmainの書き方とかが
# 全く変わっていたり、宣言で暗黙の型を当てはめてくれないらしくて、
# 「あぁ、厳密化の方向性なのね」と大雑把にMSの方針は理解できた
# ような気がするのですが、そもそも全く知らん言語なので、
# かなり困惑しています。

# ちなみにPerlCGIに書き換えたら、メモリ不足で落ちました。
# 仕方なしにC、というわけです。

で、その「あと一個」が、ファイルのハンドリングという実に初歩的
そうな所なんですね。こんな質問、あんまりカッコワルイので、
自分なりに結構調べたんですが、どうも解決作が見つかりません。

ということで、どなたか、お助け下さい。

mingw使えとか言われると、またぞろパスの書き換えが必要で面倒なので、
できれば、Visual Studio2005を前提にお願いできたら、と存じます。

以下の部分が問題のようです。

POS read_txt(unsigned short  *buf, char* file)
{
	FILE *fp;
	int c, c2;
	POS count;

	File_Name = file;
	Line_No = 1;

	fp = fopen(file, "rb");
	if (fp == NULL)
		error(ERR_READ);

	for hogehoge {
	式は省略
	}
	fclose(fp);

	File_Name = NULL;

	return count;
}

こんな感じなんですが、

fp = fopen(file, "rb");

の所で

warning C4996: 'fopen': This function or variable may be unsafe.
Consider using fopen_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
See online help for details.

というエラーが出ます。

そこで、コードの1行目(色んな#include宣言よりももっと前)に

#define _CRT_SECURE_NO_WARNINGS

と記述したのですが、それでもコードのずっと前の所の

char ERR_READ[] =

で宣言している「A 1 行目: ファイルが見つかりません.」という
エラーが出て、動かないようです。
"rb"を"r"にしてもダメでした。

なお、ファイル名はコマンドラインから2つ与える作りのようです。

でび  http://davi.txt-nifty.com/1984/