Подскажите, в чем ошибка? Инициализация строки - C (СИ)

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

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

Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
typedef struct person{
        int age;
        char * name[];
}person_c;
 
int main(int argc, char * argv[]) {
        person_c person;
        person.age = 1;
        person.name = "First Name";
}
Консоль:
eugene@eugenePC:~$ gcc prog.c 
prog.c: In function ‘main’:
prog.c:13:2: error: invalid use of flexible array member
  person.name = "First Name";
  ^
Не понимаю в чем проблема. Пробовал и через malloc, все равно та же ошибка. Что нужно этому массиву?
Причем сама ошибка не многословная
Вот так заработало:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
typedef struct person{
        int age;
        char * name[];
}person_c;
 
int main(int argc, char * argv[]) {
        person_c * person = malloc(sizeof(person));
        person->age = 1;
        person->name[0] = "Person";
        printf("Person`s name: %s\n", person->name[0]);
}
Но мне теперь нужно кое-что уточнить. 1) Значит ли 11 строчка, что память выделяется под все переменные и массивы структуры person? 2) Почему в 14 строчке вывелось полностью слово? Я думал, что выведется только "P", а при person->name[1] - "e" и так далее. Ведь поле name это массив символов, а не строк. Почему так?

Решение задачи: «Подскажите, в чем ошибка? Инициализация строки»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <conio.h>
 
typedef struct person{
        int age;
        char name[100];
}person_c;
 
int main(int argc, char * argv[]) 
{
        person_c p;
        p.age = 1;
        strcpy(p.name, "Person");
        printf("Person`s name: %s\n", p.name);
       getch();
       return 0;
}

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

  1. Включаем необходимые заголовочные файлы для работы с памятью и строками.
  2. Объявляем структуру person_c, которая содержит два поля: int age и char name[100].
  3. Задаем значение возрасту структуры person_c равным 1.
  4. Используя функцию strcpy, копируем строку Person в поле name структуры person_c.
  5. Выводим на экран содержимое поля name структуры person_c.
  6. Ждем нажатия клавиши и выходим из программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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