2010-01-26 12 views
48

मैं printf का उपयोग करके एक गैर-शून्य-समाप्त स्ट्रिंग कैसे मुद्रित कर सकता हूं, यह मानते हुए कि मुझे रनटाइम पर स्ट्रिंग की लंबाई पता है? एक साथ अन्य आर्ग के साथप्रिंटफ का उपयोग करके मैं एक गैर-शून्य-समाप्त स्ट्रिंग कैसे मुद्रित करूं?

+3

फ़्राइट का उपयोग क्यों नहीं करें? –

+4

यदि यह शून्य समाप्त नहीं हुआ है, तो परिभाषा के अनुसार यह एक स्ट्रिंग नहीं है। –

+3

यह केवल _c स्ट्रिंग_ नहीं है, क्योंकि यह अन्य भाषाओं में एक वैध स्ट्रिंग होगा .. और हालांकि "char की गैर-निरस्त सरणी" अधिक सटीक होगी, मुझे पूरा यकीन है कि यह सार्वभौमिक रूप से समझा गया था। – Willdorf

उत्तर

81
printf("%.*s", length, string); 

उपयोग:

printf("integer=%d, string=%.*s, number=%f", integer, length, string, number); 
//       ^^^^      ^^^^^^^^^^^^^^ 

सी में आप %.123s प्रारूप के साथ उत्पादन के लिए अधिकतम लंबाई निर्दिष्ट कर सकते हैं। इसका मतलब है कि उत्पादन की लंबाई अधिकतम 123 वर्णों पर है। 123 को * द्वारा प्रतिस्थापित किया जा सकता है, ताकि लंबाई को हार्ड-कोडेड के बजाय printf के तर्क से लिया जाएगा।

ध्यान दें कि यह मान लिया गया है string किसी भी इंटीरियर अशक्त बाइट्स शामिल नहीं है (\ 0), %.123s के रूप में केवल अधिकतम लंबाई नहीं सटीक लंबाई रोकें, और तार अभी भी रूप में माना जाता अशक्त-समाप्त हो गया।

यदि आप इंटीरियर नल के साथ एक गैर-शून्य-समाप्त स्ट्रिंग मुद्रित करना चाहते हैं, तो आप एक प्रिंटफ़ का उपयोग नहीं कर सकते हैं। बजाय fwrite का उपयोग करें:

fwrite(string, 1, length, stdout); 

विस्तृत विवरण के लिए @M.S.Dousti's answer देखें।

+0

त्वरित उत्तर के लिए धन्यवाद ! – Mike

+5

नोट: डिफ़ॉल्ट तर्क प्रचार के बाद, 'लंबाई' में 'int' टाइप होना चाहिए। यदि आपका 'लम्बाई' चर कुछ बड़ा है (उदा। 'Size_t') तो आपको इसे' (int) 'पर डालना चाहिए, अन्यथा आपका कोड उस प्लेटफ़ॉर्म पर टूट जाएगा जहां 'size_t'' int' से बड़ा है। –

13

@ केनीटीएम द्वारा प्रदान किया गया उत्तर बहुत अच्छा है, लेकिन एक सूक्ष्मता के साथ।

सामान्य रूप से, यदि स्ट्रिंग गैर-शून्य "समाप्त" है, लेकिन मध्य में एक शून्य चरित्र है, printf("%.*s", length, string); अपेक्षा के अनुसार काम नहीं करता है। इसका कारण यह है %.*s प्रारूप स्ट्रिंग printf पूछता एक अधिकतम length की वर्ण, बिल्कुलlength पात्रों मुद्रित करने के लिए है।

मैं नहीं बल्कि ओपी के तहत एक टिप्पणी में अधिक सामान्य समाधान बताया प्रयोग करेंगे @William Pursell द्वारा:

#include <stdio.h> 

int main(void) { 
    size_t length = 5; 

    char string[length]; 
    string[0] = 'A'; 
    string[1] = 'B'; 
    string[2] = 0;  // null character in the middle 
    string[3] = 'C'; 
    string[4] = 'D'; 

    printf("With printf: %.*s\n", length, string); 
    printf("With fwrite: "); 
    fwrite(string, sizeof(char), length, stdout); 
    printf("\n"); 

    return 0; 
} 

आउटपुट::

fwrite(string, sizeof(char), length, stdout); 

यहाँ एक नमूना कोड

With printf: AB 
With fwrite: AB CD 
+1

'sizeof (char)' परिभाषा के अनुसार 1 है। इसके अलावा, 'NULL' विशेष रूप से एक शून्य * सूचक * स्थिर है। –

+0

@ किथ थॉम्पसन, 'आकार (चार)' अधिक अर्थपूर्ण है। साथ ही, '0 \ '' 0' से अधिक अर्थपूर्ण है। लेकिन कौन परवाह करता है ;-) –

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

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