-> C 구조체의 형식 인수가 잘못되었습니다.
구조체 배열의 항목에 액세스하여 다음과 같이 구조체 필드를 인쇄하려고 합니다.
printList(Album *a, int numOfStructs)
{
int i;
int j;
for(i = 0; i < numOfStructs; i++)
{
printf("number%d\n:", i+1);
printf("%s", a[i]->field2);
printf("%s", a[i]->field2);
printf("%d", a[i]->field3);
for(j = 0; j < a[i]->numOfStrings; j++)
{
printf("%s", a[i]->strings[j]);
}
printf("\n");
}
}
하지만 나는 그런 오류들을 많이 받습니다.
'->'의 잘못된 형식 인수입니다.
제가 이 포인터를 뭘 잘못하고 있나요?
a
유형의Album*
그 말은a[i]
유형의Album
(그것은i
배열의 원소Album
가리킨 물건a
).
의 왼쪽 피연산자.->
포인터여야 합니다..
연산자는 포인터가 아닌 경우 사용됩니다.
당신은 사용해야 합니다..
교환입니다.있잖아요, 당신이 A를 적용할 때*
포인터에 대한 참조를 취소하는 것입니다.그것은 같은 것입니다.[]
. 사이의 차이*
그리고.[]
괄호 안에는 포인터에서 오프셋이 필요하며, 이 오프셋은 포인터의 주소에 추가된 후 참조를 취소해야 합니다.기본적으로 이들 표현은 동일합니다.
*ptr == ptr[0]
*(ptr + 1) == ptr[1]
*(ptr + 2) == ptr[2]
질문에 연결하기바꾸다a[i]->field2
그리고.a[i]->field3
로.a[i].field2
그리고.a[i].field3
.
언급URL : https://stackoverflow.com/questions/4983010/invalid-type-argument-of-c-structs
'programing' 카테고리의 다른 글
시스템의 대안.웹.보안.회원가입.aspnetcore에서 암호 생성(netcore app1.0) (0) | 2023.10.01 |
---|---|
잘못된 사용 부작용 연산자 함수 내에 삽입 (0) | 2023.10.01 |
주소 ()를 취하고 값을 주는 함수 (0) | 2023.10.01 |
IN 절의 MySQL 여러 열 (0) | 2023.09.26 |
C# 컴파일은 헤더 파일이 필요한 상황에서 어떻게 해결됩니까? (0) | 2023.09.26 |