This program uses a fixed-size array char *lines[10] to store the most recent ten lines of the input. That works well for printing the last 10 lines of the input, but not so well for printing more (or fewer) than the last 10 lines. In preparation for printing more (or fewer) than 10 lines, modify the program so that it obtains the storage for the last 10 lines using malloc(). #include <stdio.h> #include <string.h> #include <stdlib.h> int getchars(char *s, int limit) { int i = 0, c; while (i < limit - 1 && EOF != (c = getchar()) && c != '\n') s[i++] = c; if (EOF == c && i == 0) return -1; s[i] = '\0'; return i; } #define LINEMAX 1024 int main(int argc, char **argv) { char line[LINEMAX]; char *lines[10]; int index = 0; while (getchars(line, sizeof(line)) >= 0) { if (index >= 10) free(lines[index % 10]); lines[index++ % 10] = strdup(line); // this must be free()d } for (int i = index - 10; i < index; ++i) { if (i >= 0) { printf("%s\n", lines[i % 10]); free(lines[i % 10]); } } return 0; }
def add(a, b): return a + b add(1, 2)