Заполнение массива структур - при вводе более двух элементов возникает ошибка - C (СИ)
Формулировка задачи:
Задача: создать массив структур и заполнить с клавиатуры (произвольной длины).
Подскажите пожалуйста, в чем ошибка. При вводе больше 2 строк (создание больше 2 элементов массива структур) - выдает ошибку. При вводе 1-2 строк, вместо введенных строк, заполняет строками "end".
struct StrAndN
{
char* str = (char*)malloc(sizeof(str));
};
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "");
char* str = (char*)malloc(sizeof(str)); // объявление строки
struct StrAndN* masStr1 = (StrAndN*)malloc(sizeof(*masStr1)); // объявление массива структур
int nStr1 = 0; // счетчик
// заполнение массива структур с клавиатуры
puts("Заполнение массива структур: (end для завершения ввода)");
while (true)
{
scanf("%s", str);
if (0 == strcmp(str, "end")) break; // выход из цикла, если введена строка end
masStr1[nStr1].str = str;
nStr1++;
}
// проверка заполненной структуры
for (int i = 0; i < nStr1; i++)
{
puts(masStr1[i].str);
}
return 0;
}Решение задачи: «Заполнение массива структур - при вводе более двух элементов возникает ошибка»
textual
Листинг программы
strcpy(masStr1[nStr1].str, str);
Объяснение кода листинга программы
- В данном коде используется функция
strcpy(), которая предназначена для копирования строки. masStr1- это массив структур, в котором каждая структура содержит полеstr.nStr1- это переменная, которая, вероятно, используется для индексации массиваmasStr1.str- это строка, которую необходимо скопировать в полеstrкаждой структуры в массивеmasStr1.- Ошибка возникает, когда вводится более двух элементов, что может указывать на проблему с размером массива или его инициализацией.