해당 요소를 스택이 아닌 실행 파일의 읽기 전용 세그먼트에 저장하는 (고정 된) 배열을 사용할 수 있습니까? 나는이 코드를 만들었지 만 불행하게도 항목을 추가, 이동 또는 삭제할 때 매우 융통성이 없다. 문자열이 실제로 읽기 전용 세그먼트에 저장되었는지 어떻게 확인합니까? readelf - 파일을 시도했지만 문자열을 나열하지 않습니다. 상수 문자열 배열
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 자동 각 어레이 구조체를 생성
POS 및
데이터의 올바른 길이를 사용하는 스크립트를 고려하고있다. 메모리 사용과 관련하여 염려가 있습니까? 아니면 모든 문자열에 맞게 하나의 구조체를 만드는 것이 더 낫겠습니까?
예, 전 또한 괜찮습니다. GCC가 모든 const 변수에 대해 이미 그렇게하지 않아야합니까? – user206268