2017-12-30 76 views
-3

구조체 배열에 저장된 itemnumber 요소를 모두 인쇄하려고합니다. 그러나, 나는 배열의 길이 (배열의 항목 수)를 미리 알 수 없습니다. 나는 sizeof/sizeof(arr[0])을 사용하려했지만 작동하지 않았습니다. 이 구조 배열에있는 itemnumbers의 모든 값을 인쇄 할 수 있도록 어떻게 수행하는지에 대한 도움을 주시면 감사하겠습니다.C - 구조체 배열의 값을 표시하는 함수

코드 :에서 내 주요 :

내 구조체에서
struct item beer[100]; // gets values from a text file 
Call to function: displayAll(beer); 

: 당신은 함수가 어떤 방식이없는 다른 함수에 매개 변수로 배열의 크기를 통과해야

void displayAll(struct item beers[]) { 
int i; 
    for(i = 0; i < sizeof(beers); i++) { 
     printf("%d\n", beers[i].itemnumber); // Want it to print all of the values 
    } 
    } 
+0

디버그 what 'sizeof (beers)'가 반환합니다. - 힌트 : 그게 아니라고 생각하십시오. –

+0

배열을 함수로 전달하면 포인터가 쇠퇴합니다. 첫 번째 요소. 그래서 기본적으로'sizeof' 연산자를 부패 된 포인터보다는 배열에 적용하여 잘못된 결과를줍니다. – coderredoc

답변

0

배열의 "크기"를 알고 함수가 있어야합니다.

void displayAll(struct item beers[],int size) { 
    int i; 
    for(i = 0; i < size; i++) { 
     printf("%d\n", beers[i].itemnumber); // Want it to print all of the values 
    } 
} 

버퍼 오버플로 문제가 있습니다. 함수에서 C 배열을 올바르게 사용하지 않으면

+0

이 함수는 displayAll (beer, sizeof (beer)/sizeof (beer [0]))을 사용하여 함수를 호출하면 작동합니다. 그러나 비어있는 배열에서 많은 값을 인쇄합니다./ – Furiousfuzzy

+0

매개 변수로 수신되지 않은 배열을 처리하는 경우 sizeof 방법이 올바른 방법입니다. 함수에 매개 변수로 전송 된 배열은 포인터로 취급되므로 sizeof는 배열의 크기 대신 포인터의 크기를 반환합니다. 소스 : https : //stackoverflow.com/questions/37538/how-do-i-determine-the-size-of-my-array-in-c – kapil

+0

해결되었습니다. 때때로 여러분은 약간의 푸시가 필요한 경우도 있습니다. 너는 옳은 길에있다. – Furiousfuzzy