#define LENGTH 6
typedef char data_t[LENGTH];
struct foo {
const data_t data;
...
}
...
void bar(data_t data) {
printf("%.6s\n", data);
struct foo myfoo = {*data};
printf("%.6s\n", foo.data);
}
अंदर एक स्थिरांक सरणी आरंभ किया जा रहा है कि मैं इस struct जो सीधे डेटा मैं में, sizeof(foo) == 6+the rest
, नहीं sizeof(foo) == sizeof(void*)+the rest
इच्छुक हूँ धारण करने की कोशिश कर रहा हूँ। हालांकि मुझे की data_t
के साथ एक स्ट्रक्चर प्रारंभ करने का कोई तरीका नहीं मिल रहा है। मुझे लगता है कि शायद मैं क्षेत्र से const
संशोधक को हटा सकता हूं और memcpy
का उपयोग कर सकता हूं लेकिन मुझे अतिरिक्त सुरक्षा और स्पष्टता पसंद है।एक struct
मैं नहीं मिलता है किसी भी त्रुटि संकलन लेकिन जब मैं कोड चल रहा
123456
1??
तो प्रतिलिपि काम नहीं किया पाने के लिए ठीक से मुझे लगता है।
यह एक आर्डिनो (या इसी तरह की डिवाइस) के लिए है, इसलिए मैं इसे बहुत पोर्टेबल कोड में रखने की कोशिश कर रहा हूं।
क्या यह संभव नहीं है?
संपादित करें: data_t
फ़ील्ड पर const
संशोधक को हटाने में मदद नहीं मिलती है।
कठिनाई यह है कि तर्क 'डेटा_टी डेटा' 'char * डेटा' के बराबर है, और इसके आस-पास एक आसान तरीका नहीं है जिसे मैं सोने के समय के ढाई घंटे के बारे में सोच सकता हूं। सी, निश्चित रूप से प्रत्यक्ष सरणी असाइनमेंट का समर्थन नहीं करता है। क्या आप 'स्ट्रक्चर फू *' को 'बार' में पास कर सकते हैं? फिर यह आसान है: 'संरचना foo foo = * डेटा; '। –
टाइपिफ़ को टाइप नहीं किया जाना चाहिए 'typedef char data_t [LENGTH]; '? और 'struct foo = {* data};' मेरे लिए मान्य नहीं दिखता है ... – InternetAussie
'struct foo f {.data = {data [0], डेटा [1], डेटा [2], डेटा [3] , डेटा [4], डेटा [5]}} ' – dasblinkenlight