Ошибка при инициализации поля структуры - 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, что означает успешный конец работы программы.