online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
#define _GNU_SOURCE #include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> struct line_s { char *line; size_t len; }; struct lines_s { struct line_s *lines; size_t cnt; }; int main() { struct lines_s lines = { NULL, 0 }; // loop breaks on error of feof(stdin) while (1) { char *line = NULL; size_t size = 0; // we pass a pointer to a `char*` variable // and a pointer to `size_t` variable // `getdelim` will update the variables inside it // the initial values are NULL and 0 ssize_t ret = getdelim(&line, &size, '\n', stdin); if (ret < 0) { // check for EOF if (feof(stdin)) { // EOF found - break break; } fprintf(stderr, "getdelim error %zd!\n", ret); abort(); } // new line was read - add it to out container "lines" // always handle realloc separately void *ptr = realloc(lines.lines, sizeof(*lines.lines) * (lines.cnt + 1)); if (ptr == NULL) { // note that lines.lines is still a valid pointer here fprintf(stderr, "Out of memory\n"); abort(); } lines.lines = ptr; lines.lines[lines.cnt].line = line; lines.lines[lines.cnt].len = size; lines.cnt += 1; // break if the line is "stop" if (strcmp("stop\n", lines.lines[lines.cnt - 1].line) == 0) { break; } } // iterate over lines for (size_t i = 0; i < lines.cnt; ++i) { // note that the line has a newline in it // so no additional is needed in this printf printf("line %zu is %s", i, lines.lines[i].line); } // getdelim returns dynamically allocated strings // we need to free them for (size_t i = 0; i < lines.cnt; ++i) { free(lines.lines[i].line); } free(lines.lines); }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue