[英]C Program - “ Exception thrown at 0x0FFC0F18 (ucrtbased.dll) ” getting this error while debugging
我嘗試一對一調試代碼行,並且知道它在“ if(strcmp(takein.year,takein.year2)== 0)”行中顯示錯誤。
請檢查上面的鏈接。 我用紅色框標記了這一行。 不知道為什么會收到該錯誤。
#include<stdio.h>
#include<stdlib.h>
#include<process.h>
//STRUCTURE
struct date_struct
{
int day;
int month;
int year;
int day2;
int month2;
int year2;
};
//USER-DEFINED FUNCTION
float input(struct date_struct takein);
char tarik(struct date_struct printer);
void header();
//STRUCTURE-VARIABLES
struct date_struct date = { 0,0,0 };
void header()
{
printf("*-*-*-*DATE_STRUCT*-*-*-*");
printf("\n\n");
}
//PROGRAM STARTS HERE
main()
{
//HEADING
header();
//FUCNTION CALL-OUT
input(date);
//TERMINAL_PAUSE
system("pause");
}
float input(struct date_struct takein)
{
printf("Enter the Date(1) : \n");
printf("Day : ");
scanf_s("%d", &takein.day);
printf("\n");
printf("Month : ");
scanf_s("%d", &takein.month);
printf("\n");
printf("Year : ");
scanf_s("%d", &takein.year);
printf("\n");
printf("\n");
printf("Enter the Date-(2) : \n");
printf("Day : ");
scanf_s("%d", &takein.day2);
printf("\n");
printf("Month : ");
scanf_s("%d", &takein.month2);
printf("\n");
printf("Year : ");
scanf_s("%d", &takein.year2);
printf("\n");
tarik(takein);
if (strcmp(takein.year, takein.year2) == 0)
{
if (strcmp(takein.month, takein.month2) == 0)
{
if (strcmp(takein.year, takein.year2) == 0)
{
return(0);
}
else
return(1);
}
else
return(1);
}
else
return(1);
}
char tarik(struct date_struct printer)
{
switch (printer.month)
{
case 1:
printf("Date(1) : January %d, %d\n\n", printer.day, printer.year);
break;
case 2:
printf("Date(1) : February %d, %d\n\n", printer.day, printer.year);
break;
case 3:
printf("Date(1) : March %d, %d\n\n", printer.day, printer.year);
break;
case 4:
printf("Date(1) : April %d, %d\n\n", printer.day, printer.year);
break;
case 5:
printf("Date(1) : May %d, %d\n\n", printer.day, printer.year);
break;
case 6:
printf("Date(1) : June %d, %d\n\n", printer.day, printer.year);
break;
case 7:
printf("Date(1) : July %d, %d\n\n", printer.day, printer.year);
break;
case 8:
printf("Date(1) : August %d, %d\n\n", printer.day, printer.year);
break;
case 9:
printf("Date(1) : September %d, %d\n\n", printer.day, printer.year);
break;
case 10:
printf("Date(1) : Octomber %d, %d\n\n", printer.day, printer.year);
break;
case 11:
printf("Date(1) : November %d, %d\n\n", printer.day, printer.year);
break;
case 12:
printf("Date(1) : Devember %d, %d\n\n", printer.day, printer.year);
break;
}
switch (printer.month2)
{
case 1:
printf("Date(2) : January %d, %d\n\n", printer.day2, printer.year2);
break;
case 2:
printf("Date(2) : February %d, %d\n\n", printer.day2, printer.year2);
break;
case 3:
printf("Date(2) : March %d, %d\n\n", printer.day2, printer.year2);
break;
case 4:
printf("Date(2) : April %d, %d\n\n", printer.day2, printer.year2);
break;
case 5:
printf("Date(2) : May %d, %d\n\n", printer.day2, printer.year2);
break;
case 6:
printf("Date(2) : June %d, %d\n\n", printer.day2, printer.year2);
break;
case 7:
printf("Date(2) : July %d, %d\n\n", printer.day2, printer.year2);
break;
case 8:
printf("Date(2) : August %d, %d\n\n", printer.day2, printer.year2);
break;
case 9:
printf("Date(2) : September %d, %d\n\n", printer.day2, printer.year2);
break;
case 10:
printf("Date(2) : Octomber %d, %d\n\n", printer.day2, printer.year2);
break;
case 11:
printf("Date(2) : November %d, %d\n\n", printer.day2, printer.year2);
break;
case 12:
printf("Date(2) : Devember %d, %d\n\n", printer.day2, printer.year2);
break;
}
return;
}
strcmp(takein.year, takein.year2)
是錯誤的, takein.year
和takein.year2
的類型是int
而不是char*
。
更換
strcmp(takein.year, takein.year2)
通過
takein.year == takein.year2
應該做的工作,但可能還有其他問題。
strcmp(takein.year, takein.year2)
說比較字符串存儲在地址takein.year
和teakein.year2
。
在takein.year
和teakein.year2
我們有什么?
這些只是普通整數,而不是地址。 在這里, strcmp
試圖訪問其分配的進程內存空間之外的內存位置,這就是例外的原因。
使用==
比較int
。
使用strcmp
僅比較字符串!
還有什么是scanf_s("%d", &takein.year2);
?
我不認為scanf_s
是標准庫函數。 此代碼可以編譯並成功獲得鏈接嗎?
同樣,如果您使用的是字符串庫函數,則請包括<string.h>
盡管默認鏈接庫很可能包含大多數常用函數的函數定義。 (例如Linux中的libc
)
您已經得到同學的充分回答,我只想對您的代碼進行一些改進:
// global variable;
const char *months[] = {
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
// instead of using switch case
printf("Date(1) : %s %d, %d\n\n",months[printer.month-1], printer.day, printer.year);
printf("Date(2) : %s %d, %d\n\n", months[printer.month2-1],printer.day2, printer.year2);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.