Перераспределение памяти в отдельной функции - C (СИ)
Формулировка задачи:
Добрый день!
Имею некое недопонимание с указателями/адресами в C/C++.
Имеется некий код:
Думаю его суть ясна (пока не нажата клавиша Enter - перераспределяем память и записываем 1 элемент).
Так вот подскажите пожалуйста как мне правильно вызвать функцию чтобы мои результаты сохранились и работа с памятью осуществлялась корректно.
Ну а в идеале посоветуйте статью которая ИСЧЕРПЫВАЮЩЕ описывала все нюансы.
Знаю что в C++ можно сделать так:
Спасибо!
Листинг программы
- # include <stdio.h>
- # include <stdlib.h>
- # include <conio.h>
- void getStr(char** str)
- {
- if(*str != NULL)
- free(*str);
- *str = (char*)malloc(1);
- char buf = 0;
- *str[0] = '\0';
- int i = 1;
- for (i = 1; 1; i++)
- {
- fflush(stdin);
- buf = getch();
- if (buf == 13)
- break;
- *str = (char*)realloc(*str, i + 1 * sizeof(char));
- *str[i - 1] = buf;
- *str[i] = '\0';
- system("cls");
- printf("%s\n", *str);
- }
- }
- int main(int argc, char *argv[])
- {
- char* str = NULL;
- getStr(&str);
- printf("%s\n", str);
- system("pause");
- free(str);
- return 0;
- }
Листинг программы
- void foo(char*& str)
Решение задачи: «Перераспределение памяти в отдельной функции»
textual
Листинг программы
- # include <stdio.h>
- # include <stdlib.h>
- # include <conio.h>
- void fillStr(char** str)
- {
- (*str)= (char*)realloc((*str), 1);
- char buf = 0;
- (*str)[0] = '\0';
- int i = 1;
- for (i = 1; 1; i++)
- {
- fflush(stdin);
- buf = _getch();
- if (buf == 13)
- break;
- (*str) = (char*)realloc((*str), i + 1 * sizeof(char));
- (*str)[i - 1] = buf;
- (*str)[i] = '\0';
- system("cls");
- printf("%s\n", (*str));
- }
- }
- int main()
- {
- char* str = 0;
- fillStr(&str);
- printf("%s\n", str);
- if(str)
- free(str);
- str = 0;
- return 0;
- }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с памятью и вводом-выводом
include
include
include
- Определяем функцию fillStr, которая принимает указатель на строку и заполняет её вводом с клавиатуры
void fillStr(char* str)
{
// Выделяем память под строку
(str)= (char)realloc((str), 1);
(str)[0] = '\0';
// Заполняем строку символами, пока не будет введен символ новой строки
int i = 1;
for (; i; i++)
{
// Сбрасываем буфер ввода
fflush(stdin);
// Получаем символ из ввода
char buf = _getch();
// Если введен символ новой строки, выходим из цикла
if (buf == 13)
break;
// Выделяем память под новый символ
(str) = (char)realloc((str), i + 1 sizeof(char));
// Записываем символ в строку
(str)[i - 1] = buf;
// Выводим строку на экран
printf(
%s\n
, (*str)); } } - Определяем основную функцию программы
int main()
{
// Инициализируем указатель на строку
char* str = 0;
// Заполняем строку с помощью функции fillStr
fillStr(&str);
// Выводим строку на экран
printf(
%s\n
, str); // Освобождаем память, выделенную под строку if(str) free(str); // Сбрасываем указатель на ноль str = 0; // Завершаем программу return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д