Сбой swprintf_s при записи в инициализированный буфер - PullRequest
3 голосов
/ 20 сентября 2011

Я пишу программу на C для Windows с использованием Visual Studio 2010. Я использую функцию swprintf_s для записи отформатированной строки в буфер wchar_t. Я получаю следующие ошибки при попытке записи в буфер, который был инициализирован.

Unhandled exception at 0x77b3fbda in svats.exe: 0xC00000FD: Stack overflow.

и иногда

Unhandled exception at 0xfefefefe in svats.exe: 0xC0000005: Access violation.

Вот код, который вызывает нарушение доступа.

wchar_t wBuff[1024] = L"b";
int test;
test = swprintf_s(wBuff,sizeof(wBuff),L"a%s","test");

и код переполнения стека.

wchar_t wBuff[1024] = L"b";
int test;
test = swprintf_s(wBuff,sizeof(wBuff),L"a%s",L"test");

Теперь второй фрагмент кода сработал один раз, не знаю почему.

Кто-нибудь знает, в чем проблема?

PS. Эти файлы не загружаются, кто-нибудь знает почему? Это потому, что Visual Studio 32-битная, а моя ОС 64-битная?

'svats.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\user32.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\gdi32.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\lpk.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\usp10.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\msvcrt.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\advapi32.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\sechost.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\rpcrt4.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\sspicli.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\cryptbase.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\ws2_32.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\nsi.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\imm32.dll', Cannot find or open the PDB file
'svats.exe': Loaded 'C:\Windows\SysWOW64\msctf.dll', Cannot find or open the PDB file

1 Ответ

7 голосов
/ 20 сентября 2011
int main() {
  wchar_t wBuff[1024] = L"b";
  int test;
  test = swprintf_s(wBuff,_countof(wBuff),L"a%s","test");
}

Этот код будет работать вместо этого.Как указано pmg , второй параметр должен быть 1024, а не 2048. Когда вы делаете sizeof, он возвращает размер в байтах.Однако swprintf_s ожидает количество символов, доступных в буфере.Вы можете использовать _countof, который существенно расширяется до того, что уже было предложено вам.

...