2013-08-22 3 views
5

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

यदि मेरे पास नीचे एक हस्ताक्षरित चरित्र स्ट्रीम है, तो मैं उस स्ट्रीम के अंदर मूल्यों को कैसे मुद्रित कर सकता हूं।

सामान्य चरित्र स्ट्रीम या स्ट्रिंग के लिए मैं इसे% s का उपयोग करके प्रिंट कर सकता हूं, लेकिन इसके बारे में क्या।

अग्रिम धन्यवाद।

unsigned char *ptr ="(some value)" 
+1

क्या आपने '% s' की कोशिश की है? –

+0

'% s' ठीक काम करेगा। साथ ही, सामान्य 'char' में' हस्ताक्षरित 'हो सकता है या नहीं। – Keith

+0

@ किथ और कार्तिकट एक मिस्चैचिंग प्रकार और रूपांतरण विनिर्देशक अपरिभाषित व्यवहार नहीं है? –

उत्तर

7

यह स्ट्रिंग से निपटने की बात आती है, वहाँ unsigned char और सादे char के बीच कोई उल्लेखनीय अंतर है। उत्तरार्द्ध या तो हस्ताक्षरित या हस्ताक्षरित किया जा सकता है, यह कार्यान्वयन-परिभाषित है। हालांकि, सभी प्रतीक तालिकाओं में हमेशा सकारात्मक सूचकांक होता है। तो जब आप तारों से निपट रहे हैं, तो आप हमेशा unsigned char और char के बीच सुरक्षित रूप से कास्ट कर सकते हैं। (दो प्रकार के बीच पॉइंटर का आकार औपचारिक रूप से खराब रूप से परिभाषित व्यवहार मानक द्वारा किया जाता है, लेकिन वास्तव में, यह हमेशा किसी भी प्रणाली पर काम करेगा।)

इस प्रकार printf("%s", ptr); ठीक काम करेगा।

3

एक हस्ताक्षरित चार सरणी आम तौर पर कच्चे बाइट डेटा का प्रतिनिधित्व करती है और यदि आप इसे %s का उपयोग कर स्ट्रिंग के रूप में आउटपुट करना चाहते हैं, तो आपको शायद गिब्बिश वर्ण मिलेंगे, जो आपके लिए कोई अर्थ नहीं होंगे। यदि आप वास्तव में मान देखना चाहते हैं, तो मैं एक बाइट को short पर रूपांतरण की अनुशंसा करता हूं और फिर इसे %i के साथ आउटपुट करता हूं।

बस मेरी राय।

+1

माना। आपको अपने हस्ताक्षरित चार पीआरटी के भविष्य के उपयोग के बारे में सोचना चाहिए - क्या आप इसे नियमित सी-स्ट्रिंग्स, या 'कच्ची मेमोरी' बाइट्स के साथ उपयोग करने जा रहे हैं? आगे की योजना बनाना और उचित प्रकार का उपयोग करना सुनिश्चित करता है कि संकलक संभावित त्रुटियों की कक्षा को पकड़ने में सक्षम है। – usr2564301

+0

यदि मुझे पता है कि इसे बाइट डेटा के रूप में उपयोग किया जा रहा है, तो मैं% x का उपयोग करता हूं। – Jess

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