È possibile avere un array (fisso) che memorizza i suoi elementi nel segmento di sola lettura dell'eseguibile e non nello stack? Ho inventato questo codice ma sfortunatamente non è flessibile quando si tratta di aggiungere, spostare o eliminare elementi. Come posso verificare che le stringhe siano effettivamente memorizzate nel segmento di sola lettura? Ho provato a leggere -a file ma non elenca le stringhe.Array di stringhe costanti
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++;
}
}
sto considerando uno script che genera automaticamente una struttura per ogni array e usa la lunghezza corretta per pos e dati. Ci sono problemi in termini di utilizzo della memoria? O sarebbe meglio creare una struttura (come sopra) per adattarsi a tutte le stringhe?
Sì, anche il primo andrebbe bene. Non dovrebbe GCC farlo già di default per tutte le variabili const? – user206268