Пример кода для Retrieving the Last-Error Code на MSDN показывает этот код:Почему добавляется 40 к размеру, переданному LocalAlloc?
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
(lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR));
, который используется позже в
StringCchPrintf((LPTSTR)lpDisplayBuf,
LocalSize(lpDisplayBuf)/sizeof(TCHAR),
TEXT("%s failed with error %d: %s"),
lpszFunction, dw, lpMsgBuf);
Мне очень интересно узнать, почему именно это добавляется?
Это какой-то запас прочности? Или Microsoft пытается рассказать нам что-то о StringCchPrintf
? Или что-то другое?
Вам нужно место для всех возможных цифр 'dw', плюс текстовое сообщение. '40' может быть немного переполнен, но не сильно. –
Это практика, преподаваемая в Школе жестких ударов. Кто-то собирается локализовать строку и в значительной степени гарантированно забыть обратить внимание на число. StringCchPrintf() всегда будет держать его в беде, но все же некоторые шансы на сообщение об ошибке в Германии :) –