Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2023, 09:15   #1
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию Ошибка: Run-Time Check Failure #2 - Stack around the variable 'szBuffer' was corrupted.

Здравствуйте! Не могу сам разобраться с возникшей ошибкой, прошу помощи, взял пример из книги Петзольда, суть примера в том чтобы написать простенькие часы, в функции где формируется вывод в окно выскакивает ошибка: "Run-Time Check Failure #2 - Stack around the variable 'szBuffer' was corrupted." Не знаю, почему, но если смотреть под отладчиком, то буфер не переполняется даже место остаётся, так в чём всё же проблема, вот код функции

Код:
#define YEAR   (datetime.tm_year % 100)
#define MONTH  (datetime.tm_mon  + 1)
#define MDAY   (datetime.tm_mday)
#define WDAY   (datetime.tm_wday)
#define HOUR   (datetime.tm_hour)
#define MIN    (datetime.tm_min)
#define SEC    (datetime.tm_sec)
Код:
void WndPaint(HWND hwnd, HDC hdc)
{
	//static TCHAR szWday[] = TEXT("Sun\0Mon\0Tue\0Wed\0Thu\0Fri\0Sat");
	const TCHAR* szWday[] = { 
		TEXT("Sun"), TEXT("Mon"), TEXT("Tue"),
		TEXT("Wed"), TEXT("Thu"), TEXT("Fri"), TEXT("Sat") 
	};
	const int MAXBUFFER = 40;
	TCHAR szBuffer[MAXBUFFER];
	int iLength;
	RECT rc;
	tm datetime;
	time_t lTime;

	errno_t cur_error;
	

	time(&lTime);
	cur_error = localtime_s(&datetime, &lTime);

	iLength = _stprintf_s(szBuffer, MAXBUFFER,
		TEXT(" %s  %d%s%02d%s%02d  \r\n"),
		szWday[WDAY],
		iDate == 1 ? MDAY : iDate == 2 ? YEAR : MONTH,
		sDate,
		iDate == 1 ? MONTH : iDate == 2 ? MONTH : MDAY,
		sDate,
		iDate == 1 ? YEAR : iDate == 2 ? MDAY : YEAR);

	if (iTime == 1)
	{
		iLength += _stprintf_s(szBuffer + iLength, MAXBUFFER,
			TEXT(" %02d%s%02d%s%02d  "),
			HOUR, sTime, MIN, sTime, SEC);
	}
	else
	{
		iLength += _stprintf_s(szBuffer + iLength, MAXBUFFER,
			TEXT(" %d%s%02d%s%02d %s  "),
			(HOUR % 12) ? (HOUR % 12) : 12,
			sTime, MIN, sTime, SEC,
			sAMPM[HOUR / 12]);
	}


	GetClientRect(hwnd, &rc);
	int OldAlign = SetTextAlign(hdc, TA_CENTER);
	int OldColor = SetTextColor(hdc, RGB(255, 251, 140));
	int OldBkMode = SetBkMode(hdc, TRANSPARENT);

	TextOut(hdc, rc.right / 2, rc.top, szBuffer, _tcslen(szBuffer));

	SetTextAlign(hdc, OldAlign);
	SetTextColor(hdc, OldColor);
	SetBkMode(hdc, OldBkMode);
        
	//DrawText(hdc, szBuffer, -1, &rc, DT_CENTER | DT_NOCLIP);
       //Здесь, по завершении функции, она и проявляется.
}
apofioz вне форума Ответить с цитированием
Старый 07.09.2023, 10:32   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,357
По умолчанию

Цитата:
Сообщение от apofioz Посмотреть сообщение
stprintf_s(szBuffer + iLength, MAXBUFFER
Наверно в таких случаях надо уменьшать и MAXBUFFER
waleri вне форума Ответить с цитированием
Старый 07.09.2023, 10:48   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,772
По умолчанию

Вы действительно верите, что 14 символов хватит на 4 строки: 2 sDate и 2 sTime?
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опять все таже ошибка: Run-Time Check Failure #2 - Stack around the variable 'fam' was corrupted. borodin76 Общие вопросы C/C++ 3 18.04.2012 18:15
Ошибка Run-Time Check Failure #2 - Stack around the variable 'tmp' was corrupted. borodin76 Общие вопросы C/C++ 1 16.04.2012 09:35
Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted. Gidross Общие вопросы C/C++ 9 28.12.2010 15:22
un-time check failure #2-stack around the variable 't' was corrupted Despar Помощь студентам 1 13.05.2010 10:17
run-time check failure #2-stack around the variable 't' was corrupted Despar Общие вопросы C/C++ 1 13.05.2010 08:33