Código
{ register int c; register char *cs; cs=s; if ((*cs++=c)=='\n) break; *cs='\0'; return (c==EOF&&cs==s)?NULL : s; }
mi duda es, para que fgets funcione "s" debe ser un arreglo o tener asignado una memoria con malloc o calloc y n no puede ser mayor a la cantidad de celdas reservadas.