क्या यह एक (निश्चित) सरणी होना संभव है जो निष्पादन योग्य के केवल-पढ़ने वाले खंड में अपने तत्वों को संग्रहीत करता है, न कि स्टैक पर? मैं इस कोड के साथ आया लेकिन दुर्भाग्यवश जब आइटम जोड़ने, स्थानांतरित करने या हटाने की बात आती है तो यह बहुत ही लचीला होता है। मैं कैसे सत्यापित करूं कि स्ट्रिंग वास्तव में केवल पढ़ने वाले खंड में संग्रहीत हैं? मैंने पढ़ने की कोशिश की- एक फ़ाइल लेकिन यह तारों की सूची नहीं है।लगातार स्ट्रिंग सरणी
typedef struct {
int len;
int pos[100];
char data[500];
} FixedStringArray;
const FixedStringArray items = {
4,
{ 9, 14, 19, 24 },
"LongWord1Word2Word3Word4"
} ;
char* GetItem(FixedStringArray *array, int idx, int *len) {
if (idx >= array->len) {
/* Out of range */
*len = -1;
return NULL;
}
if (idx > 0) {
*len = array->pos[idx] - array->pos[idx - 1];
return & array->data[array->pos[idx - 1]];
}
*len = array->pos[idx];
return & array->data[0];
}
void PrintItem(FixedStringArray array, int idx) {
int len;
char *c;
int i = 0;
c = GetItem(&array, idx, &len);
if (len == -1) return;
while (i < len) {
printf("%c", *c);
*c++;
i++;
}
}
मैं एक स्क्रिप्ट है कि स्वचालित रूप से प्रत्येक सरणी के लिए एक struct उत्पन्न करता है और स्थिति और डेटा के लिए सही लंबाई का उपयोग करता पर विचार कर रहा हूँ। क्या स्मृति उपयोग के मामले में कोई चिंता है? या सभी तारों को फिट करने के लिए एक संरचना (ऊपर की तरह) बनाने के लिए बेहतर होगा?
हां, पूर्व भी ठीक होगा। क्या जीसीसी को पहले से ही सभी कॉन्स वैरिएबल के लिए डिफ़ॉल्ट रूप से नहीं करना चाहिए? – user206268