मेरे पास बहुत सारे फ़ंक्शन हैं जो तर्क के रूप में स्ट्रिंग की अपेक्षा करते हैं, जिसके लिए मैं char*
का उपयोग करता हूं, लेकिन मेरे सभी फ़ंक्शंस जो बाइट-सरणी की अपेक्षा करते हैं, char*
का भी उपयोग करते हैं।स्ट्रिंग और बाइट सरणी के बीच अंतर करें?
समस्या यह है कि मैं आसानी से एक स्ट्रिंग-फ़ंक्शन में बाइट-सरणी को पार करने की गलती कर सकता हूं, जिससे सभी प्रकार के अतिप्रवाह होते हैं, क्योंकि शून्य-टर्मिनेटर नहीं मिल सकता है।
यह आमतौर पर किस प्रकार से संबंधित है? मैं uint8_t
लेने के लिए अपने सभी बाइट-सरणी कार्यों को बदलने की कल्पना कर सकता हूं, और फिर जब मैं स्ट्रिंग पास करता हूं तो संकलक साइन-नेस के बारे में चेतावनी देगा। या यहां सही दृष्टिकोण क्या है?
एक बाइट-सरणी के लिए एक रैपर बनाएं ?? –
@ वॉननहिल्ट्स मैं नहीं देखता कि यह मेरी समस्या का हल कैसे करता है? – Muis
एक स्ट्रिंग * एक बाइट सरणी है। चूंकि आप वास्तव में सी में सरणी नहीं पारित कर सकते हैं, लेकिन पहले तत्व के लिए केवल एक सूचक, आप आमतौर पर एक आकार को पारित करना होगा। बस जांचें कि सरणी में शून्य मान है या नहीं। यदि ऐसा होता है, तो यह एक "स्ट्रिंग" है। अन्यथा, यह नहीं है। –