2016-09-09 2 views
0

I 함수를 갖고, n은 파일의 수를 분석 할 수 있으며, I는 결과를 분석 구조체의 어레이를 통과하고있어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]; 

하지만 제대로 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을 확인하십시오.