2012-10-08 11 views
5

मैं एक एक lib की एक संरचना से निपटने के लिए:ऊपर सारणी अनुक्रमणिका सीमा सी और जीसीसी त्रुटि सरणी सबस्क्रिप्ट है

typedef struct { 
    uint8_t response_type; 
    uint8_t error_code; 
    uint16_t sequence; 
    uint32_t resource_id; 
    uint16_t minor_code; 
    uint8_t major_code; 
    uint8_t pad0; 
    uint32_t pad[5]; 
    uint32_t full_sequence; 
} a_structure; 

मेरी समस्या पैड से आते हैं [5] संरचना है कि मुझे नहीं पता के सदस्य वास्तव में समझते हैं। मैं thougth इस सदस्य ऐसे ही समारोह में अन्य सदस्य के रूप में इस्तेमाल किया जा सकता:

uint8_t get_response_type(a_structure * my_struct) 
{ 
    return my_struct->response_type; 
} 

लेकिन इस समारोह:

uint32_t get_pad_5(a_structure * my_struct) 
{ 
    return my_struct->pad[5]; 
} 

जीसीसी में चेतावनी उत्पन्न

त्रुटि सरणी सबस्क्रिप्ट से ऊपर है सरणी सीमा

क्या कोई स्पष्टीकरण कर सकता है एन मुझे इसका क्या मतलब है?

thxs

+0

मैं एक काफी घुमाव के कोड है कि जीसीसी यह पता लगाने में कामयाब रहे और चेतावनी दी है "त्रुटि सरणी सब्स्क्रिप्ट सरणी सीमा से ऊपर है तो भले ही इस पोस्ट समस्या स्पष्ट था, इस में कठिनाई हुई। (पोस्ट की गई मेलिंग चेतावनी के कारण) ने मेरी जटिल समस्या को हल करने में मदद की। – chux

उत्तर

6

संरचना क्षेत्र pad को "" की सरणी के रूप में परिभाषित किया गया था। चर का उपयोग करने से आपको चर परिभाषा को अलग करना होगा। इसलिए pad परिभाषित किया गया है, pad[5] का अर्थ है "pad सरणी के पांचवें (0 से गिनती) तत्व प्राप्त करें"। लेकिन pad सरणी में ऐसा कोई तत्व नहीं है, क्योंकि इस सरणी के लिए उपलब्ध उच्चतम सूचकांक 4 है।

इसके अलावा, ऐसा लगता है कि आप पॉइंटर को इस सरणी के पहले तत्व में वापस करना चाहते हैं, पांचवां तत्व नहीं। तो अगर आप अपने कार्य इस तरह से फिर से लिखने चाहिए:

uint32_t * get_pad_5(a_structure * my_struct) 
{ 
    return my_struct->pad; 
} 
+0

आप क्या निष्कर्ष निकालते हैं ओपी मुझे पहला तत्व दिलचस्पी है? – alk

+1

@alk ओपी "पैड [5] सदस्य" से निपटना चाहता है। सरणी इंडेक्सिंग को समझ में नहीं आता है ('पैड' सरणी में कोई पांचवां तत्व नहीं है) या सरणी/सूचक परिभाषा/उपयोग (संरचना का सदस्य 'पैड' है, न कि पैड [5]')। और मुझे विश्वास है कि दूसरी समस्या एक नौसिखिया के लिए और अधिक भ्रम बनाता है। – ThomasMore

5

आप टोकरा 5 सदस्यों के साथ एक सरणी, वे 0-4 अनुक्रमित हो, अगर आप acces करने के लिए 5 प्रयास करने पर आपको सीमा

1

से बाहर हो 5 तत्वों की एक सरणी सूचकांक 0 है जब , 1, 2, 3, और 4। सूचकांक 5 सीमा से बाहर है। आम तौर पर एन तत्वों की एक सरणी में 0 से N-1 सहित वैध सूचकांक होते हैं।

2

सी में Arrays शून्य आधारित हैं।

my_struct->pad[0]; // the first pad 
my_struct->pad[4]; // the fifth pad 

चेतावनी का अर्थ है कि आप सरणी के बाहर किसी तत्व को एक्सेस करने का प्रयास कर रहे हैं। 5 का सूचकांक छठा तत्व है और सरणी में केवल 5 तत्व हैं।

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