Я хотел написать программу на C, которая будет принимать строку любой длины от stdin
и отображать ее или применять любую функцию к этой строке. Для этого мне понадобится строка (char []
) с динамической длиной.
Вот как я это сделал:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv){
char *line;
line = malloc(10);
line[0] = '\0';
char *str = malloc(10);
fprintf(stdout, "Please enter your line:\n");
while(fgets(str, 10, stdin)){
//check for line break
if(str[strlen(str)-1] == '\n'){
str[strlen(str) - 1] = '\0';
strcat(line, str);
break;
}
strcat(line, str);
line = realloc(line, strlen(line) + 10);
str = realloc(str, strlen(str) + 10);
}
fprintf(stderr, "you entered %s\n", line);
//just for testing
/*
fprintf(stderr, "\n str= %s \n", str );
fprintf(stderr, "\n line= %s \n", line);
*/
free(line);
free(str);
exit(EXIT_SUCCESS);
}
Однако это выглядит ужасно. Мне нужны два набора символов. В char *str
я запишу входные данные из stdin и соединю их с char *line
. str
будет содержать до 10 байт символов, и поэтому мне нужно объединить все до line
.
Есть ли более чистый способ сохранить вывод из stdin
в этом случае и применить к нему некоторую функцию? Я делаю это неправильно? Можно ли это сделать без malloc
и realloc
?