- ベストアンサー
C言語 [fopenのエラーについて困っています]
工学系大学一年生のものです。 VistaPC上で「Microsoft Visual C++ 2008 Exress Edition」を使っているのですが、 あるプログラムをビルドすると 'fopen'の宣言を確認してください 'fscanf'の宣言を確認してください というエラーが出てしまいます。 ネットで調べたら「fopen」などの記述は古いからこのようなエラーが出るらしいのですが、実際に使用できないのでしょうか。 学校のPCでは使えました。 上記のエラーは出るものの、一応実行ファイルは作成されるのですが、それを実行すると 下記の画像のようなエラーが出て実行されません。 http://www.dejavu.jp/~webmaster/upbbs/users/test/img/1199284636.jpg 必要であればソースも記述します。 なぜこのようなエラーが出るのかご教授お願いします。 冬休み中の課題に響くので、出来るだけ早い回答をお願いいたします。 事情があって明日は返信できないので、先にお詫びさせていただきます。
- みんなの回答 (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; } だとするとこれ↑もダメですか?
その他の回答 (4)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> ソースファイルと同じフォルダにちゃんと入れているのですが… 実行時のディレクトリ(フォルダ)が"そこ"であるかを確認しなければなりませんね。 #include <stdio.h> int main() { FILE* fp = fopen("test.txt","w"); fprintf(fp,"test\n"); fclose(fp); return 0; } を実行し、"test.txt"が"そこ"にできていますか? "test.txt"が作られたフォルダに入力ファイルを置いてください。
補足
返信遅れてすみません。 提示されたプログラムで書き出してみると、ひとつ違う階層にできていました。 しかしそのフォルダに、呼び出すテキストファイルを入れても 先ほど私が書いたプログラムでは、また画像で示したのと同じエラーが 起きてしまいました。 カレントディレクトリに対象のファイルがあるのに開くことができず、 あのエラーが出るのは何故なんでしょうか… またご回答お願いします。
- Wr5
- ベストアンサー率53% (2173/4061)
簡単にプロジェクト作って試しました。 下記のソースファイルは、 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をダブルクリックで実行の場合はエラーになることは確定しているので試すまでもなく…。
お礼
ご回答ありがとうございます。 プロジェクト作成でできたフォルダにソースファイルも呼び出すファイルも入れています。 作っていただいたプログラムをコピペしてビルドしてみたらエラーがいくつか出たので、少し変えてビルドしました。 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で起動してみると、コンパイルは出来るのですが、デバッグのところでやはり同じエラーがでてしまいます 何かまだ参照できていない要因があるのでしょうか。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
>「fopen」などの記述は古いからこのようなエラーが出るらしい > のですが、実際に使用できないのでしょうか。 errorじゃなく、warningですよね? 使えないわけじゃありません。気になるならコードの先頭に #define _CRT_SECURE_NO_WARNINGS を入れておくとwarningが消えます。 > 一応実行ファイルは作成されるのですが、それを実行すると > 下記の画像のようなエラーが出て実行されません。 fopenに失敗しています。openしようとするファイルが存在しない などの理由が考えられます。
お礼
ご回答ありがとうございます。 warningでした。 無視できるなら無視します。 プログラミングを始めたばかりなので、あまり難しいことを書くと頭がこんがらかってしまいそうです。 ソースファイルと同じフォルダにちゃんと入れているのですが… ただ入れるだけではいけないのでしょうか。
- Wr5
- ベストアンサー率53% (2173/4061)
>VistaPC上で「Microsoft Visual C++ 2008 Exress Edition」を使っているのですが、 >あるプログラムをビルドすると >'fopen'の宣言を確認してください >'fscanf'の宣言を確認してください fopen_sやfscanf_sを使用した方がよい。 という警告でしょう。 fopenで正しくオープン出来ていますか? 戻り値は確認していますか? fopen("test.txt", "r")等のようにオープンした場合、 「カレントディレクトリ」に対象ファイルがない場合はオープンに失敗します。
お礼
できました! デバッグの時のカレントディレクトリと、 作成されたexeファイルのカレントディレクトリが違うことに 気づかなくて、先ほど間違えてしまっていたようです。 私の早とちりでした。 ご丁寧に最後まで付き合っていただきありがとうございました。 とてもわかりやすい説明でした。 Wr5さんもご指導ありがとうございました。