जवाबों:
आप प्रारूप स्ट्रिंग में हार्ड कोडिंग के बजाय *
चौड़ाई निर्दिष्ट / परिशुद्धता पास करने के लिए एक तारांकन चिह्न ( ) का उपयोग कर सकते हैं printf()
, अर्थात
void f(const char *str, int str_len)
{
printf("%.*s\n", str_len, str);
}
str_len
तर्क में टाइप int
(या संकीर्ण अभिन्न प्रकार, जिसे बढ़ावा दिया जाएगा int
) होना चाहिए । यह पारित करने के लिए एक बग होगा long
, size_t
आदि,
%s
, तो मूल स्ट्रिंग के उप-स्ट्रिंग को प्रिंट करना है। इस उपयोग के मामले में, str
मूल स्ट्रिंग (संभवतः शुरुआत में) के अंदर कहीं इंगित str_len
करेगा , और उप-स्ट्रिंग की लंबाई निर्दिष्ट करेगा जिसे मुद्रित किया जाना चाहिए।
यहाँ और अधिक विस्तृत ।
पूर्णांक मान या
*
वह न्यूनतम फ़ील्ड चौड़ाई निर्दिष्ट करता है। परिणाम अंतरिक्ष वर्ण (डिफ़ॉल्ट रूप से) के साथ गद्देदार होता है, यदि आवश्यक हो तो बाईं ओर, जब सही-सही हो, या दाईं ओर से बाएं-उचित हो। मामले में जब * का उपयोग किया जाता है, तो चौड़ाई को int के अतिरिक्त तर्क द्वारा निर्दिष्ट किया जाता है। यदि तर्क का मान ऋणात्मक है, तो इसका परिणाम होता है - ध्वज निर्दिष्ट और धनात्मक क्षेत्र चौड़ाई। (नोट: यह न्यूनतम चौड़ाई है: मूल्य कभी भी छोटा नहीं होता है।)
.
इसके बाद पूर्णांक संख्या या *, या न ही जो रूपांतरण की सटीकता को निर्दिष्ट करता है। मामले में जब * का उपयोग किया जाता है, तो सटीक प्रकार के अतिरिक्त तर्क द्वारा निर्दिष्ट किया जाता है। यदि इस तर्क का मान नकारात्मक है, तो इसे अनदेखा कर दिया जाता है। यदि न तो संख्या और न ही * का उपयोग किया जाता है, तो सटीकता शून्य के रूप में ली जाती है। परिशुद्धता के सटीक प्रभावों के लिए नीचे दी गई तालिका देखें।
इसलिए यदि हम दोनों रूपांतरण विनिर्देश का प्रयास करते हैं
#include <stdio.h>
int main() {
int precision = 8;
int biggerPrecision = 16;
const char *greetings = "Hello world";
printf("|%.8s|\n", greetings);
printf("|%.*s|\n", precision , greetings);
printf("|%16s|\n", greetings);
printf("|%*s|\n", biggerPrecision , greetings);
return 0;
}
हमें आउटपुट मिलता है:
|Hello wo|
|Hello wo|
| Hello world|
| Hello world|
मुझे नहीं लगता कि उपरोक्त कोड सही है लेकिन (इस विवरण के अनुसार printf()
) का .*
मतलब है
चौड़ाई प्रारूप स्ट्रिंग में निर्दिष्ट नहीं है, लेकिन एक अतिरिक्त पूर्णांक मान तर्क के रूप में तर्क को पूर्ववर्ती किया जाना है। '
तो यह एक तर्क के रूप में एक निष्क्रिय चौड़ाई के साथ एक स्ट्रिंग है।
int
(या इसका एक सबसेट) है - न कि किसी भी अभिन्न मूल्य जैसे अधिक सहज size_t
या इसके संभव उपनाम, जैसे std::string::size_type
। यह और भी भ्रामक है, इस बात को ध्यान में रखते हुए कि संदर्भित पृष्ठ size_t
में एक समर्थित प्रकार के विशेषकों के रूप में उल्लेख किया गया है।
देखें: http://www.cplusplus.com/reference/clibrary/cstdio/printf/
.*
सटीकता को प्रारूप स्ट्रिंग में निर्दिष्ट नहीं किया गया है, लेकिन एक अतिरिक्त पूर्णांक मान तर्क के रूप में उस तर्क से पहले है जिसे प्रारूपित किया जाना है।
s
पात्रों का स्ट्रिंग
printf
कॉल नहीं है ।