_stprintf_s
_stprintf_sでエラー、0xc0000005
tchar.h Unicodeのとき。 #define _stprintf_s swprintf_s
swprintf_s correct_wstdio.h #if __STDC_WANT_SECURE_LIB__ _Success_(return >= 0) _CRT_STDIO_INLINE int __CRTDECL swprintf_s( _Out_writes_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, _In_ size_t const _BufferCount, _In_z_ _Printf_format_string_ wchar_t const* const _Format, ...) { int _Result; va_list _ArgList; __crt_va_start(_ArgList, _Format); _Result = _vswprintf_s_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); __crt_va_end(_ArgList); return _Result; } #endif
sizeを引数に渡さないと、UnitTestの関数として動く。
void LogRtn(const unsigned int rtn, const tstring filename) { const int BUFFER_SIZE = 256; size_t size = BUFFER_SIZE * sizeof(TCHAR); TCHAR buf2[BUFFER_SIZE]; _stprintf_s(buf2, _T("FileName=%s"), filename.c_str()); TCHAR buf[BUFFER_SIZE]; _stprintf_s(buf, _T("Rtn=%08X"), rtn); Logger::WriteMessage(buf); }
sizeをつけると、吹っ飛ぶ。アクセス違反0xC0000005。
void LogRtn(const unsigned int rtn, const tstring filename) { const int BUFFER_SIZE = 256; size_t size = BUFFER_SIZE * sizeof(TCHAR); TCHAR buf2[BUFFER_SIZE]; _stprintf_s(buf2,size, _T("FileName=%s"), filename.c_str()); TCHAR buf[BUFFER_SIZE]; _stprintf_s(buf, size, _T("Rtn=%08X"), rtn); Logger::WriteMessage(buf); }
よくわからない。
使っている関数と、引数が、あっていないようにみえる。