2012-03-24 14 views
9

में सरणी के मानों को आरंभ करें मेरे पास एक संरचना है जिसमें इसके अंदर कई सरणी हैं। सरणी में हस्ताक्षर किए गए चार [4] टाइप होते हैं।संरचना

मैं

struct->array1[0] = (unsigned char) something; 
... 
struct->array1[3] = (unsigned char) something; 

बुला अगर वहाँ एक पंक्ति में सभी 4 मानों प्रारंभ करने का एक तरीका है बस सोच रहा द्वारा प्रत्येक तत्व को प्रारंभ कर सकते हैं।

समाधान: मुझे प्रारंभिक सभी मानों के साथ अस्थायी सरणी बनाने की आवश्यकता है, फिर मानों को प्रतिलिपि बनाने के लिए मेमसेट() को कॉल करें।

+0

सभी समान मूल्य? – hmjd

+0

मुझे यह कहना चाहिए कि यह इतना प्रसिद्ध है कि कुछ googling जवाब जल्दी से पता चला होगा ... http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c ;-) – tchap

उत्तर

5

यदि मान समान हैं, तो आप कभी भी ऐसा कर सकते हैं हिंग तरह

struct->array[0] = struct->array[1] = struct->array[2] = struct->array[3] = (unsigned char) something; 

अन्यथा, यदि मान एक सरणी में जमा हो जाती है, तो आप memcpy समारोह इतना

memcpy(struct->array, some_array, sizeof(struct->array)); 
+0

यही वह था जो मुझे करने की ज़रूरत थी। मैंने एक अस्थायी सरणी बनाने और इसे बराबर बनाने की कोशिश की थी लेकिन मुझे memcpy की आवश्यकता थी। धन्यवाद! –

23

तुम सच मतलब है, तो "प्रारंभ" अर्थ में है कि आप समय आप चर, तो यकीन है कि घोषित पर यह कर सकते हैं:

struct x { 
    unsigned char array1[4]; 
    unsigned char array2[4]; 
}; 

struct x mystruct = { 
    { 1, 2, 3, 4 }, 
    { 5, 6, 7, 8 } 
}; 
+0

मेरा मतलब यह है कि एक बार संरचना को सरणी के साथ प्रत्येक मान को संपादित करने के लिए बनाया जाता है। –

+3

गोटो - तो आप या तो उन्हें सभी को समान मान पर सेट करने के लिए 'memset()' का उपयोग कर सकते हैं, या यदि आप उन्हें अलग करना चाहते हैं तो टेम्पलेट सरणी और 'memcpy()' बना सकते हैं। इसके अलावा, आप जो कुछ भी कर सकते हैं वह उन्हें एक-एक करके असाइन कर सकता है। –

+0

धन्यवाद, यादृच्छिकता मुझे चाहिए। –

2

हाँ:

struct Foo 
{ 
    unsigned char a[4]; 
    unsigned char b[4]; 
}; 

struct Foo x = { { 1, 2, 3, 'a' }, { 'a', 'b', 'c', 0 } }; 
10

बनाते संरचना, आप इसे कुल प्रारंभिकरण के साथ शुरू कर सकते हैं:

struct test { 
    int blah; 
    char arr[4]; 
}; 

struct test = { 5, { 'a', 'b', 'c', 'd' } }; 
2

मैं देख रहा हूँ आप एक सूचक है की तरह उपयोग कर सकते हैं (यदि आप करते हैं?)।

यदि आप calloc() के साथ सूचक के लिए स्मृति आवंटित करते हैं तो संरचना के अंदर सबकुछ 0 के साथ शुरू किया जाएगा।

अन्यथा आपको memset() से 0 तक या मूल्य तत्व-दर-तत्व असाइन करना होगा। पाश

memset(struct_pointer, 0, sizeof *struct_pointer); 
+0

धन्यवाद। मेमसेट भाग ने मेरी मदद की है। –

0

आप कर सकते हैं भी:

for(i = 0; i < 4; i++) the_struct->array1[i] = (unsigned char) something; 

यह भी जब आप चार लेकिन जैसे नहीं है काम करेंगे int (और मान! = 0)। असल में, कहने के लिए, 1 int int (जब 1 से अधिक int intof आकार) से बना एक संरचना है उन्हें प्रारंभ करने का सही तरीका नहीं है।

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

  • कोई संबंधित समस्या नहीं^_^