2016-07-11 9 views
75

जब मैं BlueZ स्रोत कोड को पढ़ने के लिए, मैं अक्सर char सरणियों इस तरह परिभाषित देखें:सी में चार सरणी के पहले तत्व के रूप में 0 को परिभाषित क्यों करें?

// bluez/android/sco-msg.h 
static const char BLUEZ_SCO_SK_PATH[] = "\0bluez_sco_socket"; 

क्या अच्छा है \0 के रूप में पहली तत्व को निर्धारित करने के लिए है?

+23

यह स्ट्रिंग को मानक कार्यों के साथ प्रिंटिंग या कॉपी करने से प्रभावी ढंग से छुपाता है - जो भी इरादा हो सकता है। – tofro

+0

ब्लूज़ में, इस शैली सरणी का उपयोग इस तरह किया जाता है: संरचना sockaddr_un addr; memcpy (addr.sun_path, BLUEZ_SCO_SK_PATH, आकार (BLUEZ_SCO_SK_PATH)); सॉकेट पथ क्या दिखता है,/dev/socket /? Bluez_sco_socket? या इसे "ls" कमांड का उपयोग करके देखा नहीं जा सकता है? – user1923105

उत्तर

116

आपके विशेष मामले में इस सरणी को PF_LOCAL सॉकेट के लिए पथनाम के रूप में उपयोग किया जाता है; here देखें। और अग्रणी एनयूएल का उपयोग यह इंगित करने के लिए किया जाता है कि पता एक सार है। man 7 unix से:

एक सार सॉकेट पते के तथ्य यह है कि sun_path [0] एक अशक्त बाइट है से भिन्न है ('\ 0')।

और यही कारण है कि पहला तत्व \0 है।

+9

पोस्टरिटी के लिए भी इसे उद्धृत करना चाहते हैं: "[टी] वह अमूर्त नेमस्पेस डब्ल्यू [जैसा] लिनक्स 2.2 के साथ पेश किया गया था और पोर्टेबल कार्यक्रमों में इसका उपयोग नहीं किया जाना चाहिए।" – Kevin

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