2013-08-26 5 views
8

में मैं सिर्फ क्लासिक कश्मीर & आर पढ़ने और निम्न सिंटैक्स का सामना करना पड़ा था:"।" का अर्थ printf

printf("%.*s",max,s); 

क्या "." यहाँ का अर्थ है जब मैं एक "." यहां लागू नहीं होते हैं, तो पूरी स्ट्रिंग छपा है, लेकिन जब हम "." लागू नहीं करते हैं, तो अधिकतम अधिकतम वर्ण मुद्रित होते हैं। अगर कोई इसे समझा सकता है तो मैं वास्तव में आभारी रहूंगा।

+1

क्या आपने सी मानक पढ़ा है? यह निर्दिष्ट करता है कि यह कैसे काम करना चाहिए ... – DCoder

+3

@DCoder सी मानक के साथ काम करने के बाद मैं बहुत सकारात्मक हूं कि इसे पढ़ना संभव नहीं है। –

+0

@ निकोलई रुहे: यह मानक के कुछ * भागों * के लिए सच हो सकता है, लेकिन मुझे 'printf' का वर्णन करने वाला अनुभाग काफी पठनीय होने वाला है। – DCoder

उत्तर

11

%.*s में, .* लिखा गया बाइट्स की संख्या को सीमित करता है। यदि यह एक अंक के साथ लिखा गया था, जैसे %.34s, तो संख्या सीमा होगी। जब तारांकन का उपयोग किया जाता है, तो सीमा को इसी तर्क से printf पर लिया जाता है।

सी 2011 से

(N1570) 7.21.6.1 4, के लिए का वर्णन रूपांतरण विनिर्देशों fprintfएट अल:

एक वैकल्पिक परिशुद्धता कि देता है ... बाइट्स की अधिकतम संख्या रों रूपांतरण के लिए लिखे जाने की । परिशुद्धता एक अवधि () के रूप में या तो तारांकन * (बाद में वर्णित) या वैकल्पिक दशमलव पूर्णांक द्वारा पीछा किया जाता है; यदि केवल अवधि निर्दिष्ट है, तो सटीकता शून्य के रूप में ली जाती है।

%2.6s

2 की एक न्यूनतम चौड़ाई और एक अधिकतम निर्दिष्ट करता है:

+0

आप लिखना चाहते हैं, "'%। * S' में, भाग '। * सीमाएं ..." अन्यथा यह पढ़ने के लिए कठिन है। – Veltas

+0

मैं 'संख्या' को 'पूर्णांक' या 'संख्या' के साथ बदल दूंगा। – Veltas

+0

@ वेल्टस: धन्यवाद, मैं '। * से पहले" द "डालता हूं। अंकों और संख्याओं के बारे में, पूर्णांक और संख्या गणितीय वस्तुओं हैं। एक अंक प्रतीकों (विशेष रूप से अंकों की एक स्ट्रिंग) है जो एक संख्या को दर्शाता है। तो "34" एक संख्या है और यह संख्या नहीं है, वैसे ही "भेड़िया" एक शब्द है और यह जानवर नहीं है। –

11

यह "वर्ण स्ट्रिंग अधिकतम क्षेत्र चौड़ाई"

एक स्ट्रिंग प्रारूप के भीतर परिशुद्धता अधिकतम क्षेत्र चौड़ाई निर्दिष्ट करता है निर्दिष्ट करता है 6 वर्णों की चौड़ाई। यदि स्ट्रिंग 6 वर्णों से अधिक है, तो इसे छोटा कर दिया जाएगा।

4

एक printf प्रारूप स्ट्रिंग चौड़ाई और परिशुद्धता निर्दिष्ट करने की अनुमति देता है।

चौड़ाई, जैसे कि %25s, printf को स्ट्रिंग से पहले रिक्त स्थान डालने के लिए स्ट्रिंग को पैड करने के लिए 0 वर्णों को 25 वर्णों की चौड़ाई तक पैड करने के लिए बताता है। (यदि स्ट्रिंग 25 वर्णों से अधिक व्यापक है, तो यह अभी भी पूरी तरह से मुद्रित है।)

%.25s जैसे एक स्ट्रिंग प्रारूप पर लागू "सटीक", मुद्रित स्ट्रिंग की लंबाई को 25 वर्णों तक सीमित करता है। 3 वर्णों की एक स्ट्रिंग पूरी तरह मुद्रित की जाएगी (बिना पैडिंग के), और 30 वर्णों की एक स्ट्रिंग में पिछले पांच वर्ण गायब होंगे।

%.*s प्रारूप में परिशुद्धता को हार्डकोडिंग से बचाता है, इसे printf पर एक पूर्णांक तर्क के रूप में निर्दिष्ट करता है, आपके मामले max में।

+0

"समय प्रारूप में ज्ञात नहीं है," इसका क्या अर्थ है? – Veltas

+0

@Veltas जब आप '% .25s' जैसे प्रारूप लिखते हैं, तो आप जानते हैं कि आपको 25 वर्णों की सटीकता की आवश्यकता होगी। जब आप '%। * S' लिखते हैं, तो आप रन-टाइम तक सटीक अनिश्चितता छोड़ देते हैं। मैं जवाब को स्पष्ट करने की कोशिश करूंगा। – user4815162342

2

सबसे पहले, के & आर सी का मूल कार्यान्वयन है, जो वर्तमान विनिर्देश से अलग है। यदि आप के & आर सी के बारे में विशिष्ट जानकारी चाहते हैं, तो विशिष्ट दस्तावेज़ीकरण से परामर्श लें।

वर्तमान सी मानक से:

एक वैकल्पिक परिशुद्धता कि देता है (...) बाइट्स की अधिकतम संख्या रों रूपांतरण के लिए लिखे जाने की। परिशुद्धता एक अवधि के रूप लेता है (।) या तो तारांकन * (बाद में वर्णित) या वैकल्पिक दशमलव पूर्णांक द्वारा पीछा किया गया।

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

इसी प्रलेखन कई मानकों या कार्यान्वयन के लिए हर जगह ऑनलाइन उपलब्ध है:

1

डॉट के अलग-अलग प्रारूप तारों के साथ अलग-अलग अर्थ हैं। यदि आप% f के साथ a.b का उपयोग करते हैं, तो बी लंबाई देता है। एक दशमलव अंक की संख्या देता है। यदि आप% s के साथ a.b का उपयोग करते हैं, तो स्ट्रिंग की न्यूनतम लंबाई देगी। जबकि बी स्ट्रिंग की अधिकतम लंबाई देता है जिसे मुद्रित किया जाएगा।