Ошибка при инициализации поля структуры - 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, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д