Некоторые трудности с Си - C (СИ)
Формулировка задачи:
Здравствуйте. Помогите исправить ошибку в программе.
#include <stdio.h> #include <malloc.h> #include <locale.h> #include <string.h> #define MAXSET 1000 #define ERROR "Ошибка: Некорректный ввод\n" int GetDigit_0_999(); char *GetLine(); char *CatLine(char *ptr_line, char *bufline); void WriteLines(char **ptr_lines); int LenLine(char *ptr_line); int main() { setlocale(LC_ALL, "RUS"); int i, type, num = 0;// dig, dig2, first, second; char **ptr_lines = (char **)malloc(1); char *ptr_line = NULL; char Menu[][40] = { "Выход\n", "Ввести строку\n", "Взять подстроку\n", "Склеить 2 строки\n", "Разбить строку на слова\n", "Вывести доступные строки\n", "Узнать длину строки\n", "Удалить строку\n" }; do { for (i = 0; i < 8; i++) printf("%d.%s", i, Menu[i]); printf("Выберите действие:"); switch (type = GetDigit_0_999()) { case 1: if (ptr_line = GetLine()) { *(ptr_lines + num++) = ptr_line; ptr_lines = (char **)realloc(ptr_lines, num + 1); // Эта строчка делает что-то не то *(ptr_lines + num) = NULL; } else printf("%s", ERROR); break; case 5: if (ptr_lines) WriteLines(ptr_lines); else printf("Нет доступных строк\n"); } } while (type); return 0; } int GetDigit_0_999() //РАБОТАЕТ { unsigned int dig; scanf_s("%u", &dig); while (getchar() != '\n'); if (dig >= 0 && dig < 1000) return dig; return EOF; } char *GetLine() //РАБОТАЕТ, необходимы тесты { char *ptr_line = (char *)malloc(1); char buf[101]; int n, len = 0; *ptr_line = '\0'; do { n = scanf_s("%50[^\n]", buf, 101); if (n > 0) { len += LenLine(buf); ptr_line = (char *)realloc(ptr_line, len + 1); CatLine(ptr_line, buf); } else if (n == 0) scanf_s("%*c"); else { free(ptr_line); ptr_line = NULL; } } while (n > 0); return ptr_line; } char *CatLine(char *ptr_line, char *bufline) //РАБОТАЕТ { char *ptr_line2 = ptr_line; for (; *ptr_line2; ptr_line2++); while (*ptr_line2++ = *bufline++); return ptr_line; } void WriteLines(char **ptr_lines) // { int i = 0; while (ptr_lines) { printf("%s\n", *ptr_lines++); } } int LenLine(char *ptr_line) //РАБОТАЕТ { char *ptr_line2 = ptr_line; for (; *ptr_line; ptr_line++); return ptr_line - ptr_line2; }
Решение задачи: «Некоторые трудности с Си»
textual
Листинг программы
realloc(ptr_lines, 4*(num + 1))
Объяснение кода листинга программы
В данном коде выполняется операция realloc, которая изменяет размер блока памяти, выделенного под переменную ptr_lines. В качестве аргументов функции realloc выступают указатель на данный блок памяти (ptr_lines) и новое значение его размера (4(num + 1)). Таким образом, код увеличивает размер блока памяти, выделенного под ptr_lines, до 4(num + 1) с целью выделения достаточного количества памяти для хранения данных.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д