내 프로그램에 몇 가지 경고가 있으며 충돌이 발생합니다. 충돌이 경고와 관련이있는 것 같지만 이해가되지 않습니다. 여기 내 코드입니다 :세그먼트 오류 및 인쇄 오류
#include <stdio.h>
struct student {
char name[100];
int id;
char *department;
struct result {
float gpa;
char grade;
} res;
};
int main(void) {
struct student W[] = {{"Saud Farooqui",137,"Electronics",{3.05,'A'}},
{"Talha Farooqui",129,"Civil",{3.5,'A'}}};
printf("First student data is\n%s\t%d\t%s\t%f\t%c",W[0].name,W[0].id,
W[0].department,W[1].res.gpa,W[0].res.grade);
printf("\nSecond student data is\n%s\t%d\t%s\t%f\t%c",W[1].name,W[1].id,
W[1].res.gpa,W[1].res.grade);
}
두 번째 printf
의 형식 지정자에 대한 이러한 경고를 인쇄 컴파일러 : 나는이 프로그램을 실행했을 때
foo.c:24:10: warning: format '%s' expects argument of type 'char *', but argument 4 has type 'double' [-Wformat=]
W[1].res.gpa,W[1].res.grade);
^
foo.c:24:10: warning: format '%f' expects argument of type 'double', but argument 5 has type 'int' [-Wformat=]
foo.c:24:10: warning: format '%c' expects a matching 'int' argument [-Wformat=]
, 첫 printf
이 선을 인쇄하지만, 두 번째 실패 :
Segmentation fault (core dumped)
무엇이 잘못 되었나요? 경고 및 충돌을 수정하려면 어떻게합니까?
경고 메시지에서 명확하지 않은 내용은 무엇입니까? segfault가 어쨌든 경고를 무시하는 것과 관련이 있다고 생각하지 않습니까? 경고는 유용합니다. 당신은 그것을 잘못된 길로 돌리고 있습니다. 먼저 경고를 수정하면 코드가 실행됩니다. –
나는 약간의 정보를 재 배열하려고 노력했는데, 이제 나는 그 질문이 더 읽기 쉽고 합리적으로 좋은 질문이라고 생각한다. –