FormatMessage
에 전달 된 인수가 너무 길 때 문제가 있습니다.FormatMessage에 잘 정의 된 크기 제한이 있습니까?
void testMessage(UINT id, ...)
{
va_list argList;
va_start(argList, id);
LPTSTR buff = NULL;
const char* str = "The following value is invalid: %1";
DWORD success = FormatMessage(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ALLOCATE_BUFFER,
str, 0, 0, (LPSTR) &buff, 0, &argList);
if(0 == success)
{
DWORD err = GetLastError();
//...
}
va_end(argList);
//...
}
int main(int argc, char** argv)
{
const char* arg = NULL;
// ...
// Initialize arg to some big string about 33,000 bytes long.
// ...
test(0, arg);
}
오류는 ERROR_MORE_DATA
(234)입니다. arg
의 크기를 약 32,000 바이트로 줄이면 문제가 발생하지 않지만 제한 사항이 전달 된 인수의 크기 또는 생성 된 문자열의 결과 총 크기와 관련이 있는지 여부가 불분명합니다. FormatMessage
의 MSDN page은 lpBuffer
매개 변수에 대해 "이 버퍼는 64KB보다 클 수 없습니다."라고 말합니다.
좀 더 오류 검사를하고이 함수에 전달하는 인수의 크기에 몇 가지 정당한 제한을두면이 문제를 쉽게 해결할 수 있지만 내 및 다른 사람들의 향후 참조를 위해 진짜 한계는 있습니다.
UNICODE 매크로가 정의되어 있지 않기 때문에 아, FormMessageA를 호출하는 것 같습니다. 그래서 그것은 설명처럼 들립니다. 감사! – Owen