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

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

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

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

Q&A

解決済

2回答

3893閲覧

ファイルオープンの関数化

tkhs314

総合スコア18

C

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

0グッド

0クリップ

投稿2018/11/20 07:59

ファイルオープンの関数化

csvファイルの内容を行番号をつけて画面に表示するプログラムを作成しようとしています.その際,ファイル入力の処理を関数化したいのですが,main()関数で扱えるようにするには,関数の型をどうすれば良いのでしょうか.
一応作ったのですが,Segmentation faultが出てしまいます.
Segmentation faultが出てきてしまった時の対処法(まずどこを確認するか?など)も教えてください!

C

1 2#include<stdio.h> 3 4#define N 256 //1行の最大文字数 5 6FILE* ReadFile(char filename[]); 7int main(void) 8{ 9 int i; 10 FILE *fp; 11 char line[N]; 12 char filename[]="ecg2s.csv"; 13 char num; 14 fp=ReadFile(&filename); 15 16 i=0; 17 while(fgets(line, N, fp) != NULL){ 18 sscanf(line, "%s", &num); 19 printf("%04d:%s",i,num); 20 i++; 21 } 22 23 24} 25FILE* ReadFile(char filename[]) 26{ 27 FILE *fp; 28 29 fp=fopen(filename, "r"); 30 if(fp == NULL){ 31 printf("%s file not open\n",filename); 32 return NULL; 33 } 34 return fp; 35}

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

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

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

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

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

guest

回答2

0

ベストアンサー

関数化云々以前に、怪しい箇所が一つ。

C

char num;
...
sscanf(line, "%s", &num);

numには一文字しか格納できません。
配列にするなどして、領域を適切に確保してください。

Segmentation faultが出てきてしまった時の対処法(まずどこを確認するか?など)も教えてください!

範囲外アクセスを疑います。
配列やポインタの取り扱いを入念にチェックしましょう。

投稿2018/11/20 08:03

編集2018/11/20 08:05
LouiS0616

総合スコア35658

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

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

tkhs314

2018/11/20 08:13

配列にしたら無事動きました! 今回の場合は,scanfしたものが変数に収まりきらないものだったため, Segmentaton faultになった,という感じでしょうか ありがとうございます!
LouiS0616

2018/11/20 08:15

一文字分しか領域が確保されていないのに、二文字目以降もメモリに書き込もうとしたからです。 配列長が充分確保されていない時も同様のエラーが発生します。
guest

0

fp=ReadFile(&filename);
fp=ReadFile(filename);

としましょう

投稿2018/11/20 08:01

y_waiwai

総合スコア87719

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問