2011-04-14 9 views
5

आप TCHAR समर्थन, का उपयोग कर विंडोज पर एक ऐप्लिकेशन बनाएं जब _tprintf() में %schar * स्ट्रिंग का मतलब Ansi बनाता है और यूनिकोड के लिए wchar_t * बनाता है, जबकि %S रिवर्स का मतलब के लिए।क्या कोई प्रारूप विनिर्देशक है जिसका अर्थ है हमेशा char स्ट्रिंग _tprintf के साथ?

लेकिन क्या कोई प्रारूप विनिर्देशक हैं जो हमेशा char * स्ट्रिंग का मतलब है चाहे कोई Ansi या यूनिकोड बिल्ड हो? चूंकि विंडोज़ यूटीएफ -16 पर भी फाइलों या नेटवर्किंग के लिए वास्तव में उपयोग नहीं किया जाता है, फिर भी यह काफी बार होता है कि आप देशी चरित्र प्रकार के बावजूद बाइट-आधारित तारों से निपटना चाहते हैं, जैसे आप अपने ऐप को संकलित करते हैं।

उत्तर

4

h संशोधक दोनों %s और %S से char*, और l संशोधक दोनों कोपर बल देता है, यानी: %hs, %hS, %ls, और %lS

+0

MSVC को यह विशिष्ट है? मैंने उबंटू 10 पर जीसीसी से यह चेतावनी देखी: 'चेतावनी:' एच 'प्रकार के चरित्र' 0 'के साथ' एच 'लम्बाई संशोधक का उपयोग – hippietrail

+0

नहीं, यह एमएसवीसी के लिए विशिष्ट नहीं है, कुछ अन्य कंपाइलर्स 'एच' और' एल' 's' प्रकार के लिए संशोधक भी। मुझे लगता है कि जीसीसी उनमें से एक नहीं है। –

+0

मैंने अभी जीसीसी (उबंटू/लिनारो 4.5.2-8ubuntu4) 4.5.2 के साथ यह कोशिश की है - यह काम करता है, तरह। – 18446744073709551615

0

आप आसानी से कुछ इस तरह लिख सकते हैं:

#ifdef _UNICODE 
#define PF_ASCIISTR "%S"L 
#define PF_UNICODESTR "%s"L 
#else 
#define PF_ASCIISTR "%s" 
#define PF_UNICODESTR "%S" 
#endif 

और फिर आप अपने प्रारूप स्ट्रिंग में PF_ASCIISTR या PF_UNICODESTR मैक्रो का उपयोग, सी स्वत: स्ट्रिंग शाब्दिक संयोजन का शोषण:

_tprintf(_T("There are %d ") PF_ASCIISTR _T(" over the table"), 10, "pens"); 
1

यह भी आपकी समस्या का समाधान हो सकता है:

_TCHAR *message; 
_tprintf(_T("\n>>>>>> %d") TEXT(" message is:%s\n"),4,message); 
संबंधित मुद्दे