В C не бывает безлимитных массивов. Ничего безлимитного вообще нигде не бывает, а в C массив это именно статический массив фиксированного размера, вы создаете массив из одного char'а. Обычно делается динамический буфер который растет от некоторого начального размера и кратно увеличивается по мере необходимости (обычно в 1.5 или 2 раза), можно растить буфер через realloc, как-то примерно так
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFSIZE 64
char * getl() {
char *buf;
size_t bufsize = BUFSIZE;
size_t inbuf = 0;
buf = malloc(bufsize);
if(!buf) return NULL; /* ошибка */
do {
if(inbuf >= bufsize - 1){ /* если в буфере кончается место */
bufsize = bufsize + (bufsize>>1); /* умножение на 1.5 */
if(!(buf = realloc(buf, bufsize))) return NULL; /* пытаемся увеличить буфер до нового размера, проверяем получилось ли */
}
if(!fgets(buf+inbuf, bufsize-inbuf, stdin)) break;
inbuf += strlen(buf+inbuf);
} while(buf[inbuf - 1] != '\n');
return buf;
}
int main(){
char * l;
l = getl();
if(l){
printf("line: %s\nstrlen: %zd\n", l, strlen(l));
free(l);
}
return 0;
}