将数组中的函数传递给scanf时发生异常

Keyan Kazemian

我不明白为什么每次尝试输入名称值时都会收到此异常。

这是我得到的异常,在Program3.exe中的0x0F59B211(ucrtbased.dll)处引发了异常:0xC0000005:访问冲突写入位置0xFFFFFFCC。

如果有用于此异常的处理程序,则可以安全地继续执行该程序。

我是c的新手,所以请彻底解释。

#include <stdio.h>
#include <string.h>

int askUser(char name[5][16],float hourlyRate[5],float hoursWorked[5])
{
    int counter = 0;

for (int i = 0; i < 5; i++)
{

    printf("enter name: ");
    scanf_s("%15s", name[i], 16);
    if (strcmp(name[i], "-1") == 0)
        break; 
    printf("enter hourly rate: ");
    scanf_s("%f", &hourlyRate[i]);
    if (hourlyRate[i] == -1)
        break;
    printf("enter hours worked: ");
    scanf_s("%f", &hoursWorked[i]);
    if (hoursWorked[i] == -1)
        break;

    counter++;
}

return counter;
}

void main()
{
const float OVERTIMEHOURS = 40.0f;
const float OVERTIMERATE = 1.5f;
const float TAX = 0.20f;
char name[5][16] = { "", "", "", "", "" };
float hourlyRate[5] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
float hoursWorked[5] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
float amountPaid[5] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
float basePay[5] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
float overPay[5] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
float taxPaid[5] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
float netPay[5] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
float overTime[5] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
float totalPaid = 0.0f;

int counter = 0;


counter = askUser(name[5][16], &hourlyRate[5], &hoursWorked[5]);
}
Madhusoodan P

你在这里错了

counter = askUser(name[5][16], &hourlyRate[5], &hoursWorked[5]);

您的函数askuser需要类型的第一个参数,char[][]但是您正在传递类型的参数,char并且所有传递的参数都适用

因此对的正确呼叫askuser()应该是

counter = askUser(name, hourlyRate, hoursWorked);

相同的错误在main中重复两次以上。请在运行代码之前查看编译器警告。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章