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

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

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

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

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

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

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы