2016-07-23 9 views
0

이름에 값을 입력 할 때마다 예외가 발생하는 이유를 알 수 없습니다.scanf 함수에서 배열을 전달할 때 예외가 발생했습니다.

Program3.exe의 0x0F59B211 (ucrtbased.dll)에서 예외가 발생하는 예외입니다. 0xC0000005 : 0xFFFFFFCC 위치 쓰기 액세스 위반입니다.

이 예외 처리기가있는 경우 프로그램을 안전하게 계속할 수 있습니다.

신입 회원이므로 철저히 설명해주십시오.

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

버그를 재현하는 [최소 예제] (http://stackoverflow.com/help/mcve)를 제공하십시오. – wasthishelpful

+0

프로그래밍 경력의이 단계에서 컴파일러에서 경고를 생성하면 코드에 버그가 있습니다. 길 아래로 몇 년이 지났지 만, 그보다 훨씬 더 자주 (100 회 중 99 회) 계속됩니다. –

답변

1

당신은 여기에서 잘못 가고있다

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

함수 askuser 유형 char[][]의 첫 번째 인수를 필요로하지만 당신은 유형 char의 인수를 전달하는이 모든 전달 된 인수

정도 참이 askuser()으로 수정 된 통화는

counter = askUser(name, hourlyRate, hoursWorked); 
이어야합니다.

동일한 오류가 다시 두 번 반복됩니다. 코드를 실행하기 전에 컴파일러 경고를 살펴보십시오.

관련 문제