#include <iostream>
#include <stdlib.h>
#include <ctime>
class Date
{
private:
time_t t = time(NULL);
struct tm* ptime = localtime(&t);
int year = ptime->tm_year + 1900;
int month = ptime->tm_mon + 1;
int day = ptime->tm_mday;
public:
int getyear() {
return year;
}
int getmonth() {
return month;
}
int getday() {
return day;
}
};
int main(void) {
Date currtime;
char* pc1 = new char[11];
if (pc1 == NULL) {
printf ("Dynamic Memory Allocation Failed".\n");
exit(1);
}
char* pc2 = new char[5];
if (pc2 == NULL) {
printf ("Dynamic Memory Allocation Failed".\n");
exit(1);
}
int num, byear, bmonth, bday;
int curryear = currtime.getyear();
int currmonth = currtime.getmonth();
int currday = currtime.getday();
printf("Enter your department name, class number, name, and date of birth in order >");
scanf_s("%s %d %s %d %d %d", pc1, 11, &num, pc2, 5, &byear, &bmonth, &bday);
printf("%s%d%s, %d, %d, %d, %d, %d, %d, %d, %d, current age is %d."), *pc1, num, *pc2, year, bmonth, bday, curry, curr month, currrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
delete(pc1); delete(pc2);
return 0;
}
Continue to run the above program in the scanf_s
line of the main function
0x7AD01F4C (ucrtbased.dll) has an unprocessed exception (from Project2.exe).
0xC0000005: An access violation occurred while reading the 0xFFFFFCD location.
The exception occurs. Even if you use scanf
instead of scanf_s
, you must specify the memory size when you receive a string with scanf_s
You have also specified a memory size, but the exception continues. I've deactivated SDL tests, and I've tried everything. I can't figure it out. Visual Studio is in use.
There are two major problems.
First of all, there is too little space to enter the name of the department. You need to increase it enough.
char* pc1 = new char[11];
char* pc2 = new char[5];
The above code should be modified, for example, as shown below. If you do not have enough space to receive the name, you may have problems when a string longer than the space is entered.
char* pc1 = new char[20];
char* pc2 = new char[20];
The second problem is that when printing a string with printf, the address value should be put where it matches %s, but in the question, the actual value through the address is not put in the address like *pc1.
printf("%s%d%s, %d%d%s, %d%d birthdate%d%d%d birthdate%d%d%d, %d%d birthdate%d%d%d"), *pc1, num, *pc2, year, bday, currrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Please correct the code above as below.
printf("%s%d%s, %d%d%s, %d%d birthdate%d%d%d birthdate%d%d%d, %d%d birthdate%d%d"), pc1, num, pc2, year, month, bday, currrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Please refer to the full code and results below.
#include <iostream>
#include <stdlib.h>
#include <ctime>
class Date
{
private:
time_t t = time(NULL);
struct tm* ptime = localtime(&t);
int year = ptime->tm_year + 1900;
int month = ptime->tm_mon + 1;
int day = ptime->tm_mday;
public:
int getyear() {
return year;
}
int getmonth() {
return month;
}
int getday() {
return day;
}
};
int main(void) {
Date currtime;
char* pc1 = new char[20];
if (pc1 == NULL) {
printf ("Dynamic Memory Allocation Failed".\n");
exit(1);
}
char* pc2 = new char[20];
if (pc2 == NULL) {
printf ("Dynamic Memory Allocation Failed".\n");
exit(1);
}
int num, byear, bmonth, bday;
int curryear = currtime.getyear();
int currmonth = currtime.getmonth();
int currday = currtime.getday();
printf("Enter your department name, class number, name, and date of birth in order >");
scanf_s("%s %d %s %d %d %d", pc1, 20, &num, pc2, 20, &byear, &bmonth, &bday);
printf("%s%d%s, %d, %d, %d, %d, %d, %d, %d, %d, current age is %d."), pc1, num, pc2, bye, bmonth, bday, curry, curr month, currrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
delete(pc1); delete(pc2);
return 0;
}
VS2015 compiles and executes the code of the questioner, and the same error occurs. If you run in debug mode and look at the stack when an exception occurs:
ucrtbased strnlen _ _, dll common c < 0, unsigned char > c++. 72 to (const unsigned char * * * * * * * const string, const unsigned int maximum the count)
Ucrtbased strnlen _ _, dll common simd < 0, 1, unsigned char > c++. 130 to (const unsigned char * * * * * * * const string, const unsigned int maximum the count)
Ucrtbased dll! _ common strnlen < 0, unsigned char > to (const unsigned char * * * * * * * const string, const unsigned int maximum the count), c++.
Ucrtbased, dll strnlen c++. 201 to (const char string and unsigned int maximum the count)
ucrtbased.dll!__crt_stdio_output::output_processor<char,__crt_stdio_output::string_output_adapter<char>,__crt_stdio_output::standard_base<char,__crt_stdio_output::string_output_adapter<char> > >::type_case_s_compute_narrow_string_length(const int maximum_length, char __formal) 줄 2281 C++
ucrtbased.dll!__crt_stdio_output::output_processor<char,__crt_stdio_output::string_output_adapter<char>,__crt_stdio_output::format_validation_base<char,__crt_stdio_output::string_output_adapter<char> > >::type_case_s() 줄 2268 C++
Ucrtbased dll! __ crt stdio _ _ :: output output processor < char, __ crt stdio output _ _ _ :: stream output adapter < char >, __ crt stdio base _ _ :: standard output < char, __ crt stdio output _ _ _ :: stream output adapter < char > > > case _ _ :: state type c++ 2012 for ().
Ucrtbased dll! __ crt stdio _ _ :: output output processor < char, __ crt stdio output _ _ _ :: stream output adapter < char >, __ crt stdio base _ _ :: standard output < char, __ crt stdio output _ _ _ :: stream output adapter < char > > 1657 to :: process () > c++.
Lambda. :: __ 2 :: < l dll, the vfprintf common ucrtbased > c++. 46 () to
ucrtbased.dll!__crt_seh_guarded_call<int>::operator()<void <람다>(void),int <람다>(void) &,void <람다>(void) >(__acrt_lock_stream_and_call::__l2::void <람다>(void) && setup, common_vfprintf::__l2::int <람다>(void) & action, __acrt_lock_stream_and_call::__l2::void <람다>(void) && cleanu204 c++ for p).
Ucrtbased dll! __ _ acrt lock and _ _ _ stream call < int < the lambda > (void) > (* _ iobuf const stream, common vfprintf 2 :: :: __ l int < the lambda > (void) & & action) to 256 c++
Ucrtbased dll! _ common vfprintf < the __ crt stdio base, _ _ :: standard output char > c++. 34 to (const unsigned const * __ _ iobuf and 64 options int stream, const char * * * * * * * const format, __ crt pointers * _ _ locale const locale, char const arglist)
Ucrtbased dll! __ stdio common _ vfprintf c++. 58 to (unsigned locale _ _ stream, __ __ crt and format char * * __ _ iobuf and 64 options int locale, char * * pointers arglist)
> ConsoleApplication5.exe!_vfprintf_l(_iobuf * const _Stream, const char * const _Format, __crt_locale_pointers * const _Locale, char * _ArgList) 줄 639 C++
5, exe printf consoleapplication 954 to (const const format, ... * char) c++.
The exception is from the printf side. Run in debug mode for a more accurate cause.
© 2024 OneMinuteCode. All rights reserved.