访问旨在获取员工姓名和信息的函数中的写入违规。当我通过开关打开该功能时,它会询问员工的姓名,但是当我按下回车键时,我会收到错误代码。
Assignment4.exe中0x6559DBE9(msvcr120d.dll)的未处理异常: 0xC0000005:访问冲突写入位置0x009A6858。
我认为是原因的代码
typedef struct person
{
char emplyName[5][SIZE];
float emplyHours[5];
float emplyRate[5];
float emplyGross[5];
float emplyBase[5];
float emplyOvrt[5];
float emplyTax[5];
float emplyNet[5];
float emplyTotal[5];
}input;
void menu(void);
void editEmployees(input* emply);
void print(input* emply);
void employeeInfo(input* emply);
int main(void)
{
struct person *payroll={""};
int choice = 0;
menu();
scanf_s("%c", &choice,1);
switch (choice){
case '1':{
employeeInfo(payroll);
break;
}
case '2':{
editEmployees(payroll);
break;
}
case '3':{
print(payroll);
break;
}
case '4':{
break;
}
default:
printf("Invalid entry\n");
}
system("pause");
}
void employeeInfo(input *emply)
{
int i = 0;
for (i=0;i<5;i++) {
printf("Enter employee name.\n");
scanf_s("%s", &emply->emplyName[i]);
printf("Enter employee hours.\n");
scanf_s("%f", &emply->emplyHours[i]);
printf("Enter Hourly rate.\n");
scanf_s("%f", &emply->emplyRate[i]);
}
}
答案 0 :(得分:0)
* emply指针可能无效。它可以为null或指向随机位置。
答案 1 :(得分:-2)
试试这个。它不是一个完整的答案,因为您需要使用引用来检索值,但它会让您感动
void employeeInfo(input emply)
{
int i = 0;
for (i=0;i<5;i++) {
printf("Enter employee name.\n");
scanf_s("%s", emply.emplyName[i]);
printf("Enter employee hours.\n");
scanf_s("%f", emply.emplyHours[i]);
printf("Enter Hourly rate.\n");
scanf_s("%f", emply.emplyRate[i]);
}
}