Ошибка при инициализации поля структуры - 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;
- }
Объяснение кода листинга программы
- Объявляется структура
StrAndN
с полем типа char* -str
. - В функции main() инициализируется указатель на структуру
StrAndN
-masStr1
. - Для выделенного указателя
masStr1
выделяется память под указатель на структуруStrAndN
с помощью malloc(). - Для первого элемента массива
masStr1
выделяется память под строкуaaa
с помощью malloc(). - С помощью функции strcpy() в выделенную память копируется строка
aaa
. - Выводится на экран содержимое поля
str
первого элемента массиваmasStr1
. - Выделенная память под строку
aaa
освобождается с помощью функции free(). - Возвращается 0, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д