• ベストアンサー

C言語 [fopenのエラーについて困っています]

工学系大学一年生のものです。 VistaPC上で「Microsoft Visual C++ 2008 Exress Edition」を使っているのですが、 あるプログラムをビルドすると 'fopen'の宣言を確認してください 'fscanf'の宣言を確認してください というエラーが出てしまいます。 ネットで調べたら「fopen」などの記述は古いからこのようなエラーが出るらしいのですが、実際に使用できないのでしょうか。 学校のPCでは使えました。 上記のエラーは出るものの、一応実行ファイルは作成されるのですが、それを実行すると 下記の画像のようなエラーが出て実行されません。 http://www.dejavu.jp/~webmaster/upbbs/users/test/img/1199284636.jpg 必要であればソースも記述します。 なぜこのようなエラーが出るのかご教授お願いします。 冬休み中の課題に響くので、出来るだけ早い回答をお願いいたします。 事情があって明日は返信できないので、先にお詫びさせていただきます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

> しかしそのフォルダに、呼び出すテキストファイルを入れても > 先ほど私が書いたプログラムでは、また画像で示したのと同じ > エラーが起きてしまいました。 "ファイル名が間違っている"くらいしか思い当たりません。 #include <stdio.h> int main() {  int a;  FILE* fp = fopen("test.txt","w");  fprintf(fp,"123\n");  fclose(fp);  fp = fopen("test.txt","r");  fscanf(fp,"%d",&a);  printf("%d\n",a);  fclose(fp);  return 0; } だとするとこれ↑もダメですか?

SG-EPI
質問者

お礼

できました! デバッグの時のカレントディレクトリと、 作成されたexeファイルのカレントディレクトリが違うことに 気づかなくて、先ほど間違えてしまっていたようです。 私の早とちりでした。 ご丁寧に最後まで付き合っていただきありがとうございました。 とてもわかりやすい説明でした。 Wr5さんもご指導ありがとうございました。

その他の回答 (4)

回答No.4

> ソースファイルと同じフォルダにちゃんと入れているのですが… 実行時のディレクトリ(フォルダ)が"そこ"であるかを確認しなければなりませんね。 #include <stdio.h> int main() {  FILE* fp = fopen("test.txt","w");  fprintf(fp,"test\n");  fclose(fp);  return 0; } を実行し、"test.txt"が"そこ"にできていますか? "test.txt"が作られたフォルダに入力ファイルを置いてください。

SG-EPI
質問者

補足

返信遅れてすみません。 提示されたプログラムで書き出してみると、ひとつ違う階層にできていました。 しかしそのフォルダに、呼び出すテキストファイルを入れても 先ほど私が書いたプログラムでは、また画像で示したのと同じエラーが 起きてしまいました。 カレントディレクトリに対象のファイルがあるのに開くことができず、 あのエラーが出るのは何故なんでしょうか… またご回答お願いします。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.3

簡単にプロジェクト作って試しました。 下記のソースファイルは、 C:\Documents and Settings\xxxxx\My Documents\Visual Studio 2008\Projects\fopen_test\fopen_test に保存されています。(当方、XPです。) // fopen_test.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { FILE *fp; int a; fp = fopen("test.txt","r"); fscanf(fp, "%d", &a); fclose(fp); return 0; } 「Microsoft Visual C++ 2008 Exress Edition」でビルドし、そのまま実行したら提示されているのと同じエラーになりました。 # test.txtを作成していないので当たり前ですが。 ソースと同じディレクトリに数字を書き込んだtest.txtを置き、 「Microsoft Visual C++ 2008 Exress Edition」からF5キーで起動さした場合はエラーなしでした。 C:\Documents and Settings\xxxxx\My Documents\Visual Studio 2008\Projects\fopen_test\Debug に作成されたexeをダブルクリックで実行の場合はエラーになることは確定しているので試すまでもなく…。

SG-EPI
質問者

お礼

ご回答ありがとうございます。 プロジェクト作成でできたフォルダにソースファイルも呼び出すファイルも入れています。 作っていただいたプログラムをコピペしてビルドしてみたらエラーがいくつか出たので、少し変えてビルドしました。 test.txtには数字を並べ、ソースファイルと同じフォルダに入れました。 #include<stdio.h> int main(){ FILE *fp; int a; fp = fopen("test.txt","r"); fscanf(fp, "%d", &a); printf("%d",&a); fclose(fp); return 0; } F5で起動してみると、コンパイルは出来るのですが、デバッグのところでやはり同じエラーがでてしまいます 何かまだ参照できていない要因があるのでしょうか。

回答No.2

>「fopen」などの記述は古いからこのようなエラーが出るらしい > のですが、実際に使用できないのでしょうか。 errorじゃなく、warningですよね? 使えないわけじゃありません。気になるならコードの先頭に #define _CRT_SECURE_NO_WARNINGS を入れておくとwarningが消えます。 > 一応実行ファイルは作成されるのですが、それを実行すると > 下記の画像のようなエラーが出て実行されません。 fopenに失敗しています。openしようとするファイルが存在しない などの理由が考えられます。

SG-EPI
質問者

お礼

ご回答ありがとうございます。 warningでした。 無視できるなら無視します。 プログラミングを始めたばかりなので、あまり難しいことを書くと頭がこんがらかってしまいそうです。 ソースファイルと同じフォルダにちゃんと入れているのですが… ただ入れるだけではいけないのでしょうか。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>VistaPC上で「Microsoft Visual C++ 2008 Exress Edition」を使っているのですが、 >あるプログラムをビルドすると >'fopen'の宣言を確認してください >'fscanf'の宣言を確認してください fopen_sやfscanf_sを使用した方がよい。 という警告でしょう。 fopenで正しくオープン出来ていますか? 戻り値は確認していますか? fopen("test.txt", "r")等のようにオープンした場合、 「カレントディレクトリ」に対象ファイルがない場合はオープンに失敗します。

関連するQ&A