53.7 문제질문
, nice david님이 작성비쥬얼에서는 정상적으로 실행되는데 테스트를 통과하지 못합니다. 어디가 잘못되었나요?
-------------------------------------------------------------------------------------------------
scanf("%s %d %s %d %s %d %s %d %s %d", &p[0]->name, &p[0]->age, &p[1]->name, &p[1]->age, &p[2]->name, &p[2]->age, &p[3]->name, &p[3]->age, &p[4]->name, &p[4]->age);
(도장_ 관리자님이 수정함 - 원문 제출일: 2020년 3월 18일, 수요일, 오후 4:36)
Re: 53.7 문제질문
, 도장_ 관리자님이 작성main.c:26:44: warning: format specifies type 'char *' but the argument has type 'char (*)[30]' [-Wformat] scanf("%s %d %s %d %s %d %s %d %s %d", &p[0]->name, &p[0]->age, &p[1]->name, &p[1]->age, &p[2]->name, &p[2]->age, &p[3]->name, &p[3]->age, &p[4]->name, &p[4]->age); ~~ ^~~~~~~~~~~ main.c:26:69: warning: format specifies type 'char *' but the argument has type 'char (*)[30]' [-Wformat] scanf("%s %d %s %d %s %d %s %d %s %d", &p[0]->name, &p[0]->age, &p[1]->name, &p[1]->age, &p[2]->name, &p[2]->age, &p[3]->name, &p[3]->age, &p[4]->name, &p[4]->age); ~~ ^~~~~~~~~~~ main.c:26:94: warning: format specifies type 'char *' but the argument has type 'char (*)[30]' [-Wformat] scanf("%s %d %s %d %s %d %s %d %s %d", &p[0]->name, &p[0]->age, &p[1]->name, &p[1]->age, &p[2]->name, &p[2]->age, &p[3]->name, &p[3]->age, &p[4]->name, &p[4]->age); ~~ ^~~~~~~~~~~ main.c:26:119: warning: format specifies type 'char *' but the argument has type 'char (*)[30]' [-Wformat] scanf("%s %d %s %d %s %d %s %d %s %d", &p[0]->name, &p[0]->age, &p[1]->name, &p[1]->age, &p[2]->name, &p[2]->age, &p[3]->name, &p[3]->age, &p[4]->name, &p[4]->age); ~~ ^~~~~~~~~~~ main.c:26:144: warning: format specifies type 'char *' but the argument has type 'char (*)[30]' [-Wformat] scanf("%s %d %s %d %s %d %s %d %s %d", &p[0]->name, &p[0]->age, &p[1]->name, &p[1]->age, &p[2]->name, &p[2]->age, &p[3]->name, &p[3]->age, &p[4]->name, &p[4]->age); ~~ ^~~~~~~~~~~ 5 warnings generated.
이와 같이 잘못된 타입을 사용해 경고가 발생하면 에러로 간주하기 때문에 통과되지 않습니다.
C 언어에서 경고는 에러로 간주해야 합니다.
타입 미스매치는 결국 보안 결함으로 이어지기 때문에 타입 미스매치 경고는 에러로 간주해야 합니다.
Visual Studio에서는 코드에서 밑줄로 경고를 표시해줍니다.
glot.io/c에서 C 언어 아이콘을 클릭하면 컴파일 옵션을 지정할 수 있습니다.
다음과 같이 지정해서 컴파일하세요.
clang main.c -Wall -ansi -pedantic -std=c11 && ./a.out