我正在使用Visual Studio 2012并使用C进行编程。我看到没有编译或运行时错误(我可以显示输入和输出)但是出现红线,当我将鼠标悬停在红线上时它会显示错误: 错误类型为void *的值不能用于初始化“Student *”类型的实体
这是我的代码:
typedef struct{
char* firstName;
char* lastName;
int day;
int month;
int year;
}STUDENT;
int numStudents=3;
int x;
// Here it show red line, when I hover on it, it show me message
//
STUDENT* students = malloc(numStudents * sizeof *students); // Here it show red line
for (x = 0; x < numStudents; x++){
students[x].firstName=(char*)malloc(sizeof(char*));
scanf("%s",students[x].firstName);
students[x].lastName=(char*)malloc(sizeof(char*));
scanf("%s",students[x].lastName);
scanf("%d",&students[x].day);
scanf("%d",&students[x].month);
scanf("%d",&students[x].year);
}
for (x = 0; x < numStudents; x++)
printf("first name: %s, surname: %s, day: %d, month: %d, year: %d\n",students[x].firstName,students[x].lastName,students[x].day,students[x].month,students[x].year);
请让我知道为什么会这样,如果有错误那么它就不应该编译或运行!!!
提前感谢您的帮助!
答案 0 :(得分:3)
您可能正在编译为C ++,并且在其中必须强制转换无效指针,而在C中则不是。
告诉Visual Studio编译为C,或者转换malloc的结果。