2011-12-10 62 views
1

我有一個字符串,看起來像L"\"4\""並希望將其解析爲一個整數值。C++ sscanf顯示意外的行爲

std::wstring wsFoo(L"\"4\""); 
int iSize = 1; // Number of characters the number will have 
int iResult = -1; 
swscanf_s(wsFoo.c_str(), L"\"%*d\"", iSize, &iResult); 
wprintf_s(L"%d", iResult); 

根據http://www.cplusplus.com/reference/clibrary/cstdio/printf/%*d星號應該意味着:寬度沒有在格式字符串指定的,但作爲一個附加的整數值的論點,即必須被格式化參數之前。

然而,iResult的值將在此代碼段後顯示爲-1。爲什麼?

我不知道是否有幫助,但我使用MSVC++ 2010

+1

爲什麼你在看的'在printf()的文檔'當你調用['swscanf_s()'](http://msdn.microsoft.com/en-us/library/t6z7bya3 (v = VS.80)的.aspx)? –

回答

3

This MSDN page解釋瞭如何使用的*,如:

百分號以下的星號(*)抑制分配 下一個輸入字段,它被解釋爲指定的 類型的字段。該字段已掃描但未保存。

請注意,printf和scanf的格式字段相近但不相同。

+0

感謝MSDN鏈接 - 這非常有幫助。我假設格式字段是相同的。 – nijansen