2016-09-09 39 views
0

私は、関数、nは分析しようとするファイルの数である、と私は結果を分析構造体の配列を渡しているC-反復処理*

struct Analysis reduce (int n, void* results) 

を持っています。次のように分析構造体が定義されている

struct Analysis { 
    int ascii[128]; //frequency of ascii characters in the file 
    int lineLength; //longest line in the file 
    int lineNum; //line number of longest line 
    char* filename; 
} 

私は、このような、

struct Analysis resArray[n]; 
struct Analysis* ptr = results; 
resArray[0] = ptr[0]; 

としてvoid *型にキャストしましたが、私はきちんとresArrayを反復処理する方法を見つけ出すことはできません。私は試しました

for (i = 0; i < n; i++){ 
    printf("lineLength: %d\n", resArray[i].lineLength); 
} 

n = 3で、私はごみ値を取得しています。 resArray [0]は正しいですが、resArray [1]は非常に高い数値で、resArray [2]は0にすぎません。なぜresArray [1]またはresArray [2]が正しい値を返さないのでしょうか?私がアドレスを間違ってインクリメントしていたのであれば意味をなさないでしょうが、特定のインデックスで配列にアクセスしています。かなりここに失われた! 「何か」があるので

+1

'resArray [i]'の代わりに 'ptr [i]'を試してみてください。 – BLUEPIXY

+1

'resArray [0] = ptr [0];を使用して' results'の最初の要素を 'resArray'の最初の要素にコピーしています。他の値は、不安定化されないままである。 – LPs

+3

'resArray [1]またはresArray [2]が正しい値を与えるのはなぜですか?なぜこれらの要素に割り当てが行われなかったのか? 'resArray [0] = ptr [0];で行ったことは、最初の要素を引っ張っていました。他のすべては配列内の* indeterminate *です。しかし、なぜ最初の場所でそれらを別の配列に入れるのですか? 'ptr [i] .linelength'だけで何が問題になっていますか? – WhozCraig

答えて

0

resArray [0]は正しいです:あなたはそこに任意の値を設定しなかったため

resArray[0] = ptr[0]; 

その他の要素はゴミです。配列全体をコピーしたい場合は、コピー方法を変更する必要があります:

for (i = 0; i < n; i++) 
{ 
    resArray[i] = ptr[i]; 
} 
-1

このコードが役に立ちます。

#include <stdio.h> 
#define d 3 
struct Analysis { 
    int ascii[128]; 
    int lineLength; 
    int lineNum; 
    char *filename; 
}; 

struct Analysis Analyses[d]; 

struct Analysis reduce(int n, void *results) { 

    struct Analysis resArray[n]; 
    struct Analysis *ptr = results; 

    for (int i = 0; i < n; i++) { 
     resArray[i] = ptr[i]; 
    } 

    for (int i = 0; i < n; i++) { 
     printf("lineLength: %d\n", ptr[i].lineLength); 
    } 

    return *ptr; 
} 

int main(void) { 
    struct Analysis a = {{5}, 2, 2, "George"}; 
    struct Analysis b = {{6}, 3, 3, "Peter"}; 
    struct Analysis c = {{7}, 4, 4, "Jane"}; 
    Analyses[0] = a; 
    Analyses[1] = b; 
    Analyses[2] = c; 
    reduce(d, &Analyses); 
    return 0; 
} 

試すことができますonlineです。

0

異なるタイプのsince array[n] is type struct analysis(*)[n] and ptr is type struct analysis(*)であるため、配列へのポインタを直接割り当てることはできません。詳細はhereをご確認ください。