c언어 질문입니다...세그멘테이션오류좀 도와주세요...

kimsunboy의 이미지

#include <stdio.h>
 
typedef struct class
{
  char *name;
  int num;
  double score;
 
}data;
 
 
int main()
{
  int a;
  printf("몇명의 학생데이터를 입력하시겠습니까?");
  scanf("%d",&a);
 
  data clas[a];
 
  for(int i=0;i<a;i++)
  {
    printf("----------------------------\n");
    printf("이름을 입력하세요->");
    scanf("%s",&(clas[i].name));
    printf("학번을 입력하세요->");
    scanf("%d",&(clas[i].num));
    printf("학점을 입력하세요->");
    scanf("%lf",&(clas[i].score));
    printf("----------------------------\n");
  }
 
  char S='Y';
 
  while(S=='Y')
  {
    printf("학생정보를 열람하시겠습니까?\n");
    scanf(" %c",&S);
 
    if(S!='Y')
       break;
 
    int NUM;
    printf("학번을 입력해 주세요->");
    scanf("%d",&NUM);
 
    for(int i=0;i<a;i++)
    {
      if(NUM==(clas[i].num))
      {
        printf("----------------------------\n");
        printf("학생이름->%s\n",clas[i].name);
        printf("학생학번->%d\n",clas[i].num);
        printf("학생학점->%lf\n",clas[i].score);
        printf("----------------------------\n");
      }
    }
  }
 
}

안녕하세요 컴파일은 잘 됩니다만...실행도중

 for(int i=0;i<a;i++)
    {
      if(NUM==(clas[i].num))
      {
        printf("----------------------------\n");
        printf("학생이름->%s\n",clas[i].name);
        printf("학생학번->%d\n",clas[i].num);
        printf("학생학점->%lf\n",clas[i].score);
        printf("----------------------------\n");
      }
    }

부분에서 포인터문자열을 출력할때 세그멘테이션 오류가 뜹니다...
문제점이 무엇인지 가르쳐 주세요 ㅠㅠㅠ..

세벌의 이미지

gcc -Wall 해서 에러 뿐 아니라 경고까지 보이게 해 보셔요.

kimsunboy의 이미지

해결했습니다!
포인터에 배열을 할당해주지않아서 문자열 입력이 불가능한거였습니다.
근데 포인터에 scanf함수로 입력할때 &를 붙여주면 안되는건가요 아님 필요없는건가요?

익명 사용자의 이미지

scanf()는 인자로 주소를 받습니다. 포인터 변수 자체가 주소를 저장하고 있기 때문에 &를 붙여줄 필요가 없습니다.

    char name[16] = "Hell World!!";
    char *p = name;

이 때 p가 아니라 &p를 준다면 p는 name의 주소가 아닌, 우리가 입력해준 값을 가지게 될겁니다.
컴파일러나 IDE가 오류를 잡아내는지는 모르겠네요