Ошибка при инициализации поля структуры - C (СИ)

Узнай цену своей работы

Формулировка задачи:

При инициализации поля структуры в массиве структур вылетает ошибка. Подскажите пожалуйста, как исправить. (длина массива структур не известна при объявлении)
struct StrAndN
{
    char* str = (char*)malloc(sizeof(str));
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    struct StrAndN* masStr1 = (StrAndN*)malloc(sizeof(StrAndN*)); // объявление массива структур
    strcpy(masStr1[0].str, "aaa"); // инициализация поля первой структуры в массиве структур
    return 0;
}

Решение задачи: «Ошибка при инициализации поля структуры»

textual
Листинг программы
struct StrAndN {
    char* str;
};
 
int _tmain(int argc, _TCHAR* argv[]) {
    struct StrAndN * masStr1 = (struct StrAndN*) malloc(sizeof(struct StrAndN*));
    masStr1[0].str = (char*)malloc(50);
    strcpy(masStr1[0].str, "aaa");
    printf("%s\n", masStr1[0].str);
    free(masStr1[0].str);
    return 0;
}

Объяснение кода листинга программы

  1. Объявляется структура StrAndN с полем типа char* - str.
  2. В функции main() инициализируется указатель на структуру StrAndN - masStr1.
  3. Для выделенного указателя masStr1 выделяется память под указатель на структуру StrAndN с помощью malloc().
  4. Для первого элемента массива masStr1 выделяется память под строку aaa с помощью malloc().
  5. С помощью функции strcpy() в выделенную память копируется строка aaa.
  6. Выводится на экран содержимое поля str первого элемента массива masStr1.
  7. Выделенная память под строку aaa освобождается с помощью функции free().
  8. Возвращается 0, что означает успешный конец работы программы.

Оцени полезность:

7   голосов , оценка 4.286 из 5
Похожие ответы