2011-04-18 132 views
2

以下代碼爲wsprintf調用生成Lint警告559「參數3的大小與格式不一致」,任何人都可以解釋原因嗎?Lint警告問題559

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

有趣的是,如果我改變的格式類型%S警告不再上調,但本課程的重新解釋szFoo作爲LPSTR而非LPWSTR,這也是錯誤的。

當然,我可以只是林特評論警告,但我很想知道爲什麼它認爲有問題。

回答

2

你的問題是,皮棉不知道寬字符串是有效的%s格式類型。

也許最簡單的解決方法是添加以下內嵌在你的代碼,在本地與執行或在頭文件:

​​
+0

非常感謝! – snowcrash09 2011-04-19 16:58:10

1

WCHAR * LPWSTR,爲什麼會這樣錯?

我建議使用LS%,這interprets as LPWSTR even if Unicode is not defined

+0

固定一個錯字 - – sehe 2011-04-18 14:50:41

+0

很好的建議,遺憾的是皮棉不知道關於這種格式類型,所以現在我得到警告557「無法識別的格式」,而不是;-) – snowcrash09 2011-04-18 15:08:13

+0

[不幸的保護法](http://en.wikipedia.org/wiki/Conservation_law) – sehe 2011-04-18 15:09:59