Прекратить запись в динамический массив по нажатию Enter - C (СИ)
Формулировка задачи:
Привет всем !!!! пытаюсь разобраться с работой с памятью, на примере создания динамического массива и вывода его на экран (пока пользователь вводит что нибудь программа считывает строку в массив ,как только пользователь ничего не вводит и жмет Enter считывание строк прекращается) вот мой код
Заранее всем спасибо!!!!
#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 20
int main()
{
char **string;
int i,j;
char buffer[20] = {0};
char buff[20];
unsigned min;
int count = 0;
string=(char**)malloc(1*sizeof(char*));
while (fgets(buffer, sizeof(buffer), stdin) &&
(buffer[0] != '\n'))
{
string[count]=(char*)malloc(MAXLEN*sizeof(char));
string[count] = buffer;
printf("%s",string[count]);
string=(char**)malloc(1*sizeof(char*));
count++;
}
for (i = 0; i < (count - 1); ++i)
{
printf("%s",string[i]);
}
return 0;
}Решение задачи: «Прекратить запись в динамический массив по нажатию Enter»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *str = (char*)malloc(sizeof(char));
char *ptr = str;
int chr;
printf("Введите строку: ");
chr = getchar();
while (chr != '\n')
{
*ptr = (char)chr;
str = (char*)realloc(str, ptr-str+sizeof(char)*2);
++ptr;
chr = getchar();
}
*ptr = '\0';
puts (str);
free (str);
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Создается динамический массив (строка) на 1 символ с помощью malloc.
- Вводится строка с помощью функции getchar, которая считывает ввод посимвольно.
- Пока вводимая строка не закончится (до нажатия Enter), выполняется следующее:
- Каждый символ вводится в динамический массив.
- Динамический массив увеличивается в размере с помощью realloc.
- Указатель на следующий элемент в динамическом массиве увеличивается.
- После ввода строки, последний символ устанавливается в '\0' для обозначения конца строки.
- Введенная строка выводится с помощью функции puts.
- Динамический массив освобождается с помощью функции free.
- Программа возвращает 0, заканчивая свое выполнение.