のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

_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);
		}

よくわからない。
使っている関数と、引数が、あっていないようにみえる。