質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

9270閲覧

Visual Studioを使ってファイル処理の際にstdio.h発生するエラーについて

SioRyu

総合スコア28

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2017/07/28 04:51

###前提・実現したいこと
ここに質問したいことを詳細に書いてください
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
現在大学ではCentOSからLinuxを使用して、C言語を勉強しておりまして。家のパソコンでもプログラミングを勉強したく、Visual Studioを使い始め、少しづつ慣れてきたのですが、ファイル処理の仕方がどう探してもわかりません。もしよろしければだれか下記エラーの治し方を教えていただけると助かります。
###発生している問題・エラーメッセージ

エラーメッセージ

0x0FDA8B51 (ucrtbased.dll) で例外がスローされました (ConsoleApplication5.exe 内): 0xC0000005: 場所 0x00F00014 への書き込み中にアクセス違反が発生しました

###該当のソースコード

ここにご自身が実行したソースコードを書いてください

void scanfile(struct STATION stations[]) {
FILE *fp;
int i;
if ((fp = fopen("eki.txt", "r")) == NULL) {
printf("%sがありません\n", "eki.txt");
}
i = 0;
while (fscanf(fp, "%s", stations[i].name) != EOF)
{
i++;
}
fclose(fp);
}
おそらくですがこの部分でのファイル処理ができていないと考えられます。
stdio.hの1061行で上のエラーメッセージが表示されています。

###試したこと
課題に対してアプローチしたことを記載してください
FBで知り合ったSEの人に聞いてみたり(答えを求めず、自分で解決できるよう努力しなさいと言われました)、ネット上でVisual Studioのファイル処理の仕方を調べたりしました。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
C言語
Visual Studio 2017

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2017/07/28 04:59

コードの全体を示してください。 「この部分でのファイル処理ができていない」と考えた根拠やエラーメッセージの内容なども追加してください。
guest

回答2

0

ベストアンサー

問題ありそうなところ

1)eki.txt が存在しない場合でも下の読み取り処理に進んでしまうため fscanf でアクセス違反になります

→ ファイルが存在したときだけ処理するように書き換えてみてください。

2)構造体配列の stations の大きさよりも読み取ろうとしている eki.txt の中身が多いとアクセス違反になります

→ i のループの最大を stations の配列数までとするようにしてみてください。

せっかく Visual Studio をお使いなら、ブレイクポイントを置いてデバッグ実行しステップさせながら処理を追う方法をおぼえるとよいですよ。

投稿2017/07/28 06:18

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SioRyu

2017/07/28 06:27

if ((fp = fopen("eki.txt", "r")) == NULL) { printf("%sがありません\n", "eki.txt"); exit(1); } 本来このようにしたいのですが、exit(1)が大学のLinuxと違いエラーE0020コードが出ます。
SioRyu

2017/07/28 06:48

exit のVisual Studioでの使い方を先ほどいろんなサイト調べたところわかりました
guest

0

ファイルの場所は正しくて、開くことはできていますか? 開けない場合、このコードだとバグります(fscanfやfcloseにヌルポインタを渡してはいけない)。あと、ファイルの中身もできたら見せてください。

投稿2017/07/28 05:35

majiponi

総合スコア1720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SioRyu

2017/07/28 06:25

Millbrae San Bruno San Francisco Colma Daly City Balboa Park Glen Park 24th St Mission 16th St Mission Civic Center/UN plaza Powell St Montgomery St Embarcadero West Oakland 12th St/Oakland City Center 19th St/Oakland MacArthur Ashby Downtown Berkeley North Berkeley El Cerrito Plaza El Cerrito del Norte Richmond Rockridge Orinda Lafayette Walnut Creek Pleasant Hill/Contra Costa Centre Concord North Concord/Martinez Pittsburg/Bay Point Lake Merritt Fruitcale Coliseum San Leandro Bay Fair Castro Valley West Dublin/Pleasanton Dublin/Pleasanton Hayward South Hayward Union City Fremont Warm Springs/South Fremont ファイルの中身です、ファイルを消したら、”ファイル名”がありませんと表示され、それで泊まります if ((fp = fopen("eki.txt", "r")) == NULL) { printf("%sがありません\n", "eki.txt"); exit(1); } 本来このようにしたいのですが、exit(1)が大学のと違いエラーE0020コードが出ます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問