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