2009-06-02 17 views
57

Size_t को unsigned पूर्णांक के रूप में परिभाषित किया गया है, लेकिन इसका आकार इस पर निर्भर करता है कि आप 32 या 64-बिट मशीन पर हैं या नहीं। size_t प्रिंट करने का सही और पोर्टेबल तरीका क्या है?size_t प्रिंट करने के लिए printf का उपयोग करने का सही तरीका क्या है?

+2

[आकार आकार \ _t?] के चर के लिए क्रॉस प्लेटफ़ॉर्म प्रारूप स्ट्रिंग का संभावित डुप्लिकेट (http://stackoverflow.com/questions/174612/cross-platform-format-string-for-variables-of-type-size -टी) –

+0

@black आप दूसरे तरीके को बंद करने का प्रस्ताव भी दे सकते हैं। या तो मेरे लिए ठीक है। –

उत्तर

83

%zu प्रारूप स्ट्रिंग

size_t val = get_the_value(); 
printf("%zu",val); 

z भाग लंबाई विनिर्देशक जो तर्क लंबाई में size_t किया जाएगा कहते हैं का उपयोग करें।

स्रोत - http://en.wikipedia.org/wiki/Printf#printf_format_placeholders

+4

size_t एक हस्ताक्षरित प्रकार है, इसलिए आपको अभी भी 'यू' प्रारूप प्रकार के साथ-साथ 'z' लंबाई संशोधक के रूप में उपयोग करने की आवश्यकता है। –

+8

इसके अलावा, 'z' संशोधक printf के लिए एक C99 अतिरिक्त है, इसलिए यह कड़ाई से मानक C++ सुविधा नहीं है। –

+0

@ चार्ल्स ने आपके हिस्से को सही किया और मैंने शुरुआत में एक सी टैग जोड़ा। मैं उम्मीद करता हूं कि यह सी ++ की तुलना में अधिक सी सुविधा होगी क्योंकि सी ++ कोउट रूट जा सकता है। – JaredPar

8

इतने cout << एक और संभावित जवाब है, इस पर एक सी ++ टैग है।

सी। सी 0 9 0 के सभी संस्करणों में सही होने के लिए यह आश्चर्यजनक रूप से कठिन है, unsigned long पर कास्टिंग करना चाहिए, लेकिन यह सी 99 में काम नहीं कर सकता है, और सी 99 समाधान आवश्यक रूप से सी 9 0 में काम नहीं करेंगे। 1 9 5 के परिवर्तनों में विश्वसनीय रूप से सी 0 9 0 और सी 99 के बीच अंतर करने की क्षमता पेश की गई थी (__STDC__ के लिए स्वीकार्य मान निर्दिष्ट करना)। मुझे नहीं लगता कि एक पूरी तरह पोर्टेबल तरीका है जो सी 0 9, सी 99 और सी ++ के लिए काम करता है, हालांकि उनमें से किसी एक के लिए समाधान हैं।

7

मुझे लगता है कि सी ++ जवाब है:

std::size_t n = 1; 
std::cout << n; 

के लिए सी-शैली आईओ यह थोड़ा और अधिक जटिल है। सी 99 में उन्होंने size_t मूल्यों के लिए z लंबाई संशोधक जोड़ा। हालांकि, इस TR1 करने के लिए पिछले समर्थित नहीं है तो आप की तरह एक विशिष्ट आकार के लिए कास्टिंग के साथ छोड़ दिया जाता है:

std::size_t n = 1; 
std::printf("%lu\n", static_cast<unsigned long>(n)); 

फिर, unsigned long long वास्तव में सी द्वारा समर्थित नहीं है ++ वैसे तो ऊपर unsigned long के बाद से ठीक काम करेगा सबसे बड़ा कानूनी अभिन्न प्रकार। TR1 के बाद आप size_t मानों के लिए सुरक्षित रूप से %zu का उपयोग कर सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे