0

私はコードを持っています:ソートする必要がある構造の配列。プログラムは動作しますが:

私は理解できませMatん. 本当に困惑しています。void sort(tArt *sMat)void sort(tArt sMat[])

typedef struct{
    char data[26];
}tArt;

 ...

int main(void)

{
  FILE* fMat; fMat=fopen..........

  tArt* Mat;

  ...

  Mat=malloc(sizeof(tArt));

  for(i=0;i<N;i++) fread(&Mat[i],sizeof(tArt),1,fMat);

  fclose(fMat);

  sort(Mat,N); 
...
}

void sort(tArt sMat, int num) {...........}
4

2 に答える 2

1

コード全体が見えないので、malloc を使用して配列を動的に割り当てるときに、N 個の「オブジェクト」に配列を割り当てるのを忘れていると思います。言い換えれば、あなたの問題はラインにあると思います

Mat = malloc(sizeof(tArt));

どこにあるべきか

Mat = malloc(sizeof(tArt) * N);

一方、フォームの宣言を使用して配列を明示的に作成すると、

 tArt Mat[N];

ここで、N は楕円の前のどこかで定義されており、すべてが期待どおりに機能しています。

お役に立てれば。

于 2013-02-25T16:53:22.830 に答える
0

tArt *sMattArt sMat[]との間に違いはありませんtArt sMat[1234]。コンパイラはそれらをすべてとして扱いtArt *sMat、長さ情報を無視します。

于 2013-02-25T16:21:55.107 に答える