सी

2011-01-30 8 views
12

में एक स्ट्रिंग का प्रिंट हिस्सा प्रिंट करें केवल स्ट्रिंग का हिस्सा प्रिंट करने का कोई तरीका है?सी

उदाहरण के लिए, अगर मैं

char *str = "hello there"; 

है वहाँ एक रास्ता अभी "hello" मुद्रित करने के लिए है, और याद रखें कि सबस्ट्रिंग मैं प्रिंट करना चाहते हैं चर लंबाई 5 वर्ण है, हमेशा नहीं?

मुझे पता है कि मैं for लूप और putchar का उपयोग कर सकता हूं या मैं सरणी की प्रतिलिपि बना सकता हूं और फिर एक नल टर्मिनेटर जोड़ सकता हूं लेकिन मुझे आश्चर्य है कि क्या कोई और शानदार तरीका है?

+0

चरित्र या मापदंड आप पर बंद करना चाहते हैं क्या है? स्पष्टीकरण के बिना इस प्रश्न का उत्तर देना मुश्किल है – kelloti

उत्तर

28

इस प्रयास करें:

int length = 5; 
printf("%*.*s", length, length, "hello there"); 
+2

मैं 7 सेकंड बहुत धीमा था =) – SiegeX

+1

@ घेराबंदी: Yup - ' \ nintmain (शून्य) \ n {'{' {~ {0] –

+0

बेशक, अगर वह stderr, या एक फ़ाइल, या कुछ जीयूआई में एक लेबल के लिए मुद्रित करना चाहता है, क्लासिक 'printf' मदद नहीं करेगा। शायद sprintf/fprintf का नोट भी बना सकते हैं? –

14

यह भी काम करेगा:

fwrite(str, 1, len, stdout); 

यह फॉर्मेट स्पेसिफायर पार्स करने की भूमि के ऊपर नहीं होगा। जाहिर है, सबस्ट्रिंग की शुरुआत को समायोजित करने के लिए, आप सूचकांक को सूचकांक में जोड़ सकते हैं।

+0

हालांकि मैं 'printf'-style formatting का उपयोग करके * प्यार * करता हूं, इसलिए यह सबसे आसान जवाब है इसलिए सबसे सुंदर जवाब। – dummydev

1

आप strncpy का उपयोग अपने स्ट्रिंग के भाग को प्रिंट करना चाहते नकल करने कर सकते हैं, लेकिन आप एक अशक्त टर्मिनेटर जोड़ने के लिए, strncpy काम नहीं चलेगा के रूप में है कि अगर उस में एक मुठभेड़ नहीं है देखभाल करने के लिए होगा स्रोत स्ट्रिंग जेरी कॉफिन ने बताया कि एक बेहतर समाधान, इच्छित *printf फ़ंक्शन का उपयोग कर रहा है ताकि आप जिस सबस्ट्रिंग को चाहते हैं उसे लिख या कॉपी कर सकें। strncpy इसकी आदत नहीं किसी के हाथ में खतरनाक हो सकता है

है, यह एक printf/sprintf/fprintf शैली समाधान की तुलना में निष्पादन समय के मामले में तेज़ी से किया जा सकता है के बाद से से निपटने की भूमि के ऊपर में से कोई भी नहीं है स्वरूपण तार। मेरा सुझाव है कि यदि आप कर सकते हैं strncpy से बचने के लिए, लेकिन बस मामले में जानना अच्छा है।

size_t len = 5; 
char sub[6]; 
sub[5] = 0; 
strncpy(sub, str + 5, len); // char[] to copy to, char[] to copy from(plus offset 
          // to first character desired), length you want to copy 
0

printf और दोस्तों के काम अच्छी तरह से जब कि तुम सब आंशिक तार के साथ क्या करना चाहते है, लेकिन एक अधिक सामान्य समाधान के लिए:

char *s2 = s + offset; 
char c = s2[length]; // Temporarily save character... 
s2[length] = '\0'; // ...that will be replaced by a NULL 
f(s2); // Now do whatever you want with the temporarily truncated string 
s2[length] = c;  // Finally, restore the character that we had saved 
+1

यदि आप स्ट्रिंग शाब्दिक पास करते हैं तो यह यूबी देगा (जो ओपी दिखाता है ...) –