Проблема с предупреждением Lint 559 - PullRequest
2 голосов
/ 18 апреля 2011

Следующий код генерирует предупреждение Lint 559 «Размер аргумента № 3, несовместимый с форматом» для вызова wsprintf, кто-нибудь может объяснить почему?

WCHAR szFoo[] = L"test";
WCHAR szBar[MAX_PATH];
wsprintf(szBar, L"c:\\path\\%s\\path", szFoo);

Забавно, если я изменю тип формата на %S, предупреждение больше не будет выдаваться, но это, конечно, повторно интерпретирует szFoo как LPSTR, а не LPWSTR, что также неправильно.

Конечно, я могу просто прокомментировать предупреждение, но мне интересно знать, почему оно считает, что есть проблема.

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

Ваша проблема в том, что lint не знает, что широкие строки допустимы для типа формата %s.

Вероятно, самое простое решение - добавить следующий встроенный код в код, либо локально с реализациейили в заголовочном файле:

//lint -printf_code("s", TCHAR*)
1 голос
/ 18 апреля 2011

WCHAR * равно LPWSTR, с чего бы это неправильно?

Я предлагаю использовать% lS, который интерпретируется как LPWSTR, даже если Unicode не определен

...