前提・実現したいこと
.csvファイルをJSON化するプログラムです.現段階ではcsvファイルを読み込み,配列に格納する所まで制作しました.
発生している問題・エラーメッセージ
2行目のcsvデータを表示し終えた後にSegmentationFault11が発生.3行目の読み込みが出来ない.
もう一つ気がかりなのが,csvファイルの最後の列である[name]の"]"だけが表示されない事.
./a.out [Settings] [Toilet_Duration] [0:01] [date] [sleep_state.start1] [sleep_state.end1] [sleep_state.dur1] [sleep_state.start2] [sleep_state.end2] [sleep_state.dur2] [toilet.start1] [toilet.end1] [toilet.start2] [toilet.end2] [toilet.start3] [toilet.end3] [toilet.start4] [toilet.end4] [toilet.start5] [toilet.end5] [toilet.start6] [toilet.end6] [toilet.start7] [toilet.end7] [toilet.start8] [toilet.end8] [bath.start] [bath.end] [bath.dur] [remarks] [name Segmentation fault: 11
該当のソースコード
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4 5#define N 512 // 1行の最大文字数(バイト数) 6#define X 512 7#define Colum 30 8 9int main(void) { 10 FILE *fp; // FILE型構造体 11 char fname[] = "test2.csv"; 12 char str[N]; 13 char *box[X]; 14 char *p; 15 int i = 0; 16 //bool bol = true; 17 18 //ファイルの読み込み判断 19 fp = fopen(fname, "r"); // ファイルを開く。失敗するとNULLを返す。 20 if(fp == NULL) { 21 printf("%s file not open!\n", fname); 22 return -1; 23 } 24 25 /***************** 26 * 1行目 27 */ 28 29 //ファイルを1行ごとに呼び出し 30 fgets(str, N, fp); 31 //", " で分解 32 p = strtok(str, ","); 33 34 //puts(p); 35 //box[]に値を収納 36 box[i] = p; 37 i++; 38 39 while(p!=NULL){ 40 p = strtok(NULL,","); 41 42 if(p!=NULL){ 43 44 //puts(p); 45 box[i] = p; 46 //printf("%s\n", box[i]); 47 i++; 48 } 49 } 50 51 //printf("%s\n", str); 52 53 //printしてるのここ 54 printf("[%s] [%s] [%s]\n", box[0], box[1], box[2]); 55 56 /******************* 57 * 2行目 58 */ 59 60 //ファイルを1行ごとに呼び出し 61 while (fgets(str, N, fp)!=NULL) { 62 i = 0; 63 //", " で分解 64 p = strtok(str, ","); 65 66 //puts(p); 67 //box[]に値を収納 68 box[i] = p; 69 i++; 70 71 while (p != NULL) { 72 p = strtok(NULL, ","); 73 74 if (p != NULL) { 75 76 //puts(p); 77 box[i] = p; 78 //printf("%s\n", box[i]); 79 i++; 80 } 81 } 82 83 //printしてるのここ 84 for (int j = 0; j < Colum; j++) { 85 printf("[%s] ", box[j]); 86 } 87 printf("\n"); 88 } 89 90 91 /****************************************** 92 * 最後の〆 93 */ 94 fclose(fp); // ファイルを閉じる 95 96 printf("\n"); 97 98 return 0; 99}
試したこと
Segmentation Faultに陥る状況の例などを参照.
自身のファイルにそれぞれの条件が当てはまらないか比較.
While文を除去し2行目だけ実行.結果は変わらず.
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/11 14:00