访问c中的写入违规位置

时间:2015-08-02 16:49:48

标签: c

访问旨在获取员工姓名和信息的函数中的写入违规。当我通过开关打开该功能时,它会询问员工的姓名,但是当我按下回车键时,我会收到错误代码。

  

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]);
    } 
}

2 个答案:

答案 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]);
    } 
}