Ошибка запуска приложения: неизвестная ошибка в Android Studio 3.1

Вы на правильном пути. Однако нет «гибкой структуры». Вы хотите использовать элемент гибкого массива (avail с C99) в struct:

typedef struct {
    int age;
    size_t name_size;    // size of the array, not length of the name!
    char name[];         // Flexible array member
} Structure;

int main(void) {
    Structure *one = malloc(sizeof(*one) + SIZE_OF_NAME_ARRAY);
}

Примечание. Я добавил поле name_size. C не сохраняет размер выделенных массивов, поэтому вам может понадобиться это для безопасной копирования / сравнения и т. Д. (Предотвратите переполнение буфера).

Использование *one делает этот термин независимым от используемого фактического типа. Размер такой структуры такой, как если бы в элементе были нулевые элементы. Тем не менее, он будет правильно выровнен, поэтому он может отличаться от того же struct без массива.

Также обратите внимание, что вы должны изменить выделенный размер, если используете другой, чем массив char, чтобы что-то вроде sizeof(element_type) * ARRAY_SIZE. Это не обязательно для char s, так как их размер определяется стандартом как 1.

30
задан Vadim Kotov 30 March 2018 в 14:09
поделиться