構造体を作成し、そのID番号、その値、およびステータスを持っています。 私は、データ(1 199 0 2 199 1 ...)1から成るファイルを持っています。数字は199、値は0、ステータスは0です。このように進んでいます... 私は1つの関数を呼び出しました一度に3つの数値を読み込むためのfilldata()は、たとえば1 199 0であり、構造体配列の渡された要素に入れます。 そして、私はこの関数をstruct配列を埋めるために呼び出す別の関数を使用しました。 fillAll関数は、ファイルから構造体配列にコピーされたデータセットを返します。 しかし、セグメント化エラーが発生しました。どんな考え?あなた繰り返し開いたファイル名filelocation
構造体の配列を扱う際のセグメンテーションエラー
int filldata(struct Data_point *a, const char *filelocation)
{
FILE *f;
if((f=fopen(filelocation,"r"))==NULL)
printf("You cannot open");
if(fscanf(f, "%ld%lf%d", &(a->sampleNumber), &(a->value), &(a->status)) == 3)
return 1;
else
return 0;
}
int fillAll(struct Data_point *a, const char *filelocation)// I will pass the struct array and the location of my file string
{
int index=0;
while(filldata(&a[index], filelocation))
index++;
return index;
}
これは明らかに、配列に要素があるよりも多くのトリプレットが含まれていると、データファイルが配列サイズをオーバーランさせることがあります。 –
fopen()が失敗した場合、メッセージを出力するだけでなく、 'return'して残りのコードの実行も停止します。 – karlphillip
@Amardeep、テスト目的のために、私の配列が非常に大きく、私のファイル内のデータセットは非常に小さいです –