Как в СИ можно ввести строки не зная их длины и количества строк
Как на языке СИ ввести двумерный строчный массив текста произвольной длины и количества строк. Или как можно ввести строки не зная их длины и количества строк.
Входной файл состоит из строк, которые необходимо проверить на корректность.
([abc]{def})
)[abc]{def}(
{}[]()
или
}}}}
{}{}{}{}{}{}aaa
Ответы (1 шт):
Если кол-во строк не известно, то должен быть признак конца. Например, конец файла, пустая строка, специальная строка ( к примеру "---END---").
Теперь, с чтением строк неизвестного размера. В общем случае они не могут быть бесконечно большими. Поэтому, можно читать завести буфер достаточного размера и читать.
Можно воспользоваться getline. Тогда чтение будет где то такое
char* data = NULL;
int real = getline(&data, 0, stdin);
// делаем что то с данными, real - размер строки, data - сами данные stdin - стандартный ввод
free(data);
да, согласно документации, getline сам выделит память, если передать ему ссылку на указатель на NULL и 0 как размер.
Завернем теперь это все
FILE *f =fopen(...);
int real;
char* buf = NULL;
while ((real = getline(buf, 0, f) > 0) {
// делаем что то с данными в buf.
free(buf);
buf = NULL;
}
fclose(f);