La tecnica es leer con una funcion como fgets que a diferencia de scanf no deja basura en el buffer, la cadena donde se almacene puede ser memoria dinamica tranquilamente no tiene que ser un array.
Con *line = 0; hacemos que la cadena linea este vacia (las cadenas terminan en 0), supongamos que fgets falla y no escribe nada (lo mismo habria que hacer al principio, igual es un ejemplo nada mas), entonces seguimos teniendo una cadena vacia, el metodo del memset tambien es bueno (siempre es mejor usar sizeof por si cambiamos el tamaño).