簡體   English   中英

C程序-“在0x0FFC0F18(ucrtbased.dll)引發異常”在調試時得到此錯誤

[英]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.yeartakein.year2的類型是int而不是char*

更換

strcmp(takein.year, takein.year2)

通過

takein.year == takein.year2

應該做的工作,但可能還有其他問題。

strcmp(takein.year, takein.year2)  

說比較字符串存儲在地址takein.yearteakein.year2

takein.yearteakein.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM