2016-08-21 1 views
-1

아는 바에 따르면 % d은 int 값을 필요로합니다. 나는 왜 gcc 컴파일러가 int *를 기대한다고 말하는지 이해하지 못한다.% d inting * in c

여기 내 코드입니다 :

#include<stdio.h> 
#include<stdlib.h> 

struct student 
{ 
    int rn, m[5]; 
    char nm[25]; 
}; 

int main() 
{ 
    struct student* s[5]; 
    struct student **q=s; 

    int i = 0; 

    printf("Enter data"); 

    for(i=0;i<5;i++) 
    { 
     printf("\nStudent %d:\n",i+1); 
     printf("Roll number: "); 
     scanf("%d",(s[i])->rn); 
     printf("\n%d",s[i]->rn); 
    } 
} 

그리고 여기 경고입니다 :

warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=] 
scanf("%d",(s[i])->rn); 
+2

'scanf'는 포인터를 기대하므로 실제로 int의 값을 변경할 수 있습니다. – tkausl

+0

또한's [i]'는 초기화되지 않았습니다. – BLUEPIXY

답변

2

는 scanf가 그것으로 읽을 수있는 변수에 포인터를 소요하는 int에 값을 읽습니다.

scanf("%d",&((s[i])->rn)); 
0

printf%d위한 int 걸리지 만 scanfint (AN int *)의 어드레스를 취하므로 그 변환 된 값을 저장할 수있다.

0

여기에서 RTFM이 도움이됩니다. scanf 및 관련 함수 (sscanf 등)에는 값을 읽을 변수의 포인터가 항상 필요합니다. scanf documentation