/* * @Author: 1ridic * @Date: 2022-09-18 14:14:05 * @Last Modified by: 1ridic * @Last Modified time: 2022-09-18 14:14:05 */ #include #include #include #include #include #include #include "line.h" char **splitLine(char *line) { int bufsize = LINE_BUF_SIZE, position = 0; char **tokens = malloc(bufsize * sizeof(char *)); char *token; if (!tokens) { fprintf(stderr, "dish: allocation error"); exit(EXIT_FAILURE); } /* get sub string *" \t\r\n\a" is a set of delimiters, * which stands for space, tab, carriage, newline, and alert. */ token = strtok(line, " \t\r\n\a"); while (token != NULL) { tokens[position] = token; #ifdef DEBUG fprintf(stdout, "debug: tokens[%d] = %s\n", position, tokens[position]); #endif position++; /* if the buffer is full, reallocate */ if (position >= bufsize) { bufsize += LINE_BUF_SIZE; tokens = realloc(tokens, bufsize); if (!tokens) { fprintf(stderr, "dish: allocation error\n"); exit(EXIT_FAILURE); } } token = strtok(NULL, " \t\r\n\a"); } /* set the last element to NULL */ tokens[position] = NULL; return tokens; }