2012-10-06 82 views
0

我使用Visual C++ 2010,代碼爲:爲什麼在argv [0]的輸出中出錯?

#include "stdafx.h" 
#include <stdio.h> 

int _tmain(int argc, _TCHAR* argv[]) { 
    printf("step 0: %s\n", argv[0]); 
    int d; 
    scanf("%d",&d); 
    return 0; 
} 

當我選擇_UNICODE,輸出爲「d」, 當我選擇_MBCS,它運作良好,並輸出爲「d: \ VCTest \ c1006.exe「

爲什麼在_UNICODE中出錯? 如何爲_UNICODE和_MBCS使用相同的代碼?

+0

很難理解你在問什麼;闡述? – muhmuhten

+1

@sreservoir:請參閱http://msdn.microsoft.com/en-us/library/c426s321%28v=vs.80%29.aspx,但這只是VS2005 – Zeta

+0

'printf'不會執行unicode。 –

回答

5

編譯Unicode項目時,_TCHARwchar_t,而不是char

%s格式說明符期望其相應的參數是char const*;你傳遞一個wchar_t*,從而出現意想不到的結果。

您可以使用_tprintf,這將選擇基於項目是否正在建立爲ANSI或Unicode權printf功能(printfwprintf)。如果要使用printf,則可以使用%ls格式說明符來處理寬字符串,但是必須使用不同的格式字符串,具體取決於項目是建立爲ANSI還是Unicode。

另外,只要使用Unicode,不要使用_TCHAR和朋友。

+0

非常感謝,我使用_tprintf(_T(「step 0:%s \ n」),argv [0]);它運作良好。 – aasa