質問編集履歴

1 誤字

aka_09

aka_09 score 11

2018/05/29 12:28  投稿

テキストファイルのデータを動的メモリで確保する方法
お世話になります。
以下の演習問題が分からなかったため、質問させていただきます。
問題
テキストファイルのデータを表示する。
1行1024byte以内の動的メモリを確保。
行数は無制限である。難しい場合、行数は指定していい。
自分が考えた処理の流れとしては、
①ファイルオープン
②各データ配列分とデータ配列の要素分のメモリを確保
③fgetsでファイルから1行読み込み、メモリに格納
④fputsでメモリに格納されている文字を表示
⑤メモリ解放
難しかったため、今回行数は10行で指定しました。
行数を指定しないでメモリを確保するときの
ファイルの行数を知る方法を教えていただきたいです。
また、実行したところ以下の警告がでました。
![イメージ説明](bd85045d8cc77d4b94d35d61b3be2000.png)
```ここに言語を入力
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LINE 10
int main(void) {
        char **data;
        int i;
        FILE *in_fp;
        data = (char **)malloc(sizeof(char *) * MAX_LINE);            //各データ配列を確保
        for (i = 0; i < MAX_LINE; i++) {
                data[i]=(char *)malloc(sizeof(char) *1025);           //要素分のメモリ確保
        }
        in_fp = fopen("in_file.txt","r");       //ファイルオープン
        while(fgets(data,1024,in_fp)!=NULL){                           //文字列を1行読み取る
            puts(data);
        }
        for (i = 0; i < MAX_LINE; i++){                                 //各データ配列のメモリを解放
            free(data[i]);
        }
             free(data);                                                 //ポインタ配列plistのメモリを解放
             free(data);                                                 //ポインタ配列datatのメモリを解放
        return 0;
}
```
  • C

    9199 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る