Ist es möglich, ein (festes) Array zu haben, das seine Elemente im schreibgeschützten Segment der ausführbaren Datei und nicht im Stack speichert? Ich habe diesen Code entwickelt, aber leider ist er sehr unflexibel, wenn es darum geht, Elemente hinzuzufügen, zu verschieben oder zu löschen. Wie kann ich überprüfen, ob die Zeichenfolgen tatsächlich im schreibgeschützten Segment gespeichert sind? Ich versuchte readelf -a Datei, aber es listet nicht die Zeichenfolgen auf.Konstante String-Arrays
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++;
}
}
I ein Skript am Annahme, dass ein struct für jedes Array automatisch erzeugt und verwendet die richtige Länge für pos und Daten. Gibt es Bedenken hinsichtlich der Speichernutzung? Oder wäre es besser, eine Struktur (wie oben) für alle Strings zu erstellen?
Ja, ersteres wäre auch in Ordnung. Sollte GCC das nicht schon standardmäßig für alle const Variablen tun? – user206268