前提・実現したいこと
C言語でファイル内の10万件のデータを読み込むプログラムを作成したいです。
データの例はソースコードの下に記載しています。
元々defineで定義していたのですが、全くプログラムが実行されないのでmallocを使用しました。しかしながらファイル名入力後にプログラムが終了してしまいます。他の方法がありましたら、ご教示お願いします。
ここで示したポインタ(配列)はこれらを使ったプログラムを作成するために二次元のままで解決したいです。
発生している問題・エラーメッセージ
エラーメッセージは出ませんでした。
//実行中の流れを記載します FILE NAME : /*入力(例Name.txt)*/ OK //終了 //ファイルの件数が50件や120件ではOKが出力されるのですが、件数が10万件となるとOKが出力されずに終了します。 //defineで定義したときはファイル名の入力もできず終了してしまいます
該当のソースコード
c
1#include <stdio.h> 2#include <stdlib.h> 3#define N 1000 4 5int scanfile(char **n, char **p){ 6 FILE *fp = NULL; 7 char file[FILENAME_MAX]; 8 9 printf("FILE NAME : "); scanf("%s", file); 10 11 if((fp = fopen(file, "r")) == NULL){ 12 printf("ファイルをオープンできません。\n"); 13 return -1; 14 } 15 int i; 16 for(i = 0; fscanf(fp, "%s %s\n", n[i], p[i]) != EOF; i++); 17 fclose(fp); 18 19 return i; 20} 21 22int main(void){ 23 int i, m; 24 char **name = malloc(sizeof(char*) * N * 100); 25 for(i = 0; i < N; i++){ 26 name[i] = malloc(sizeof(char) * 20); 27 } 28 char **phone = malloc(sizeof(char*) * N * 100); 29 for(i = 0; i < N; i++){ 30 phone[i] = malloc(sizeof(char) * 20); 31 } 32 33 if(name == NULL){ 34 printf("nameメモリ確保エラー\n"); 35 return -1; 36 } 37 38 if(phone == NULL){ 39 printf("phoneメモリ確保エラー\n"); 40 return -1; 41 } 42 43 44 m = scanfile(name, phone); 45 printf("OK\n"); 46 47 for(i = 0; i < m; i++){ 48 free(name[i]); 49 free(phone[i]); 50 } 51 free(name); 52 free(phone); 53 54 return 0; 55} 56
試したこと
defineによる定義、mallocで領域の確保
補足情報(FW/ツールのバージョンなど)
入力するファイルの例です。
//この形式で10万件あります Goto 090-4414-1644 Kaji 178-3725-1591 Nozawa 759-3857-4789 Murakami 028-0204-2740 Kobayashi 937-9204-2948 Suzuki 930-8394-8621 . . . . . .
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/20 03:12