Подскажите, в чем ошибка? Инициализация строки - C (СИ)
Формулировка задачи:
Код:
Консоль:
Не понимаю в чем проблема. Пробовал и через malloc, все равно та же ошибка. Что нужно этому массиву?
Но мне теперь нужно кое-что уточнить.
1) Значит ли 11 строчка, что память выделяется под все переменные и массивы структуры person?
2) Почему в 14 строчке вывелось полностью слово? Я думал, что выведется только "P", а при person->name[1] - "e" и так далее.
Ведь поле name это массив символов, а не строк. Почему так?
#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"; ^
Причем сама ошибка не многословная
Вот так заработало:
#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]);
}Решение задачи: «Подскажите, в чем ошибка? Инициализация строки»
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;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с памятью и строками.
- Объявляем структуру person_c, которая содержит два поля: int age и char name[100].
- Задаем значение возрасту структуры person_c равным 1.
- Используя функцию strcpy, копируем строку
Personв поле name структуры person_c. - Выводим на экран содержимое поля name структуры person_c.
- Ждем нажатия клавиши и выходим из программы.