En realidad no es que scanf siempre termine cuando encuentra un espacio en blanco, mas bien, scanf lee la información de la entrada estandar ( el teclado) con cierto formato que TÚ defines.
La forma más común en la que se leen cadenas con scanf es:
Hay que tomar en cuenta que las cadenas (arreglos de caracteres o apuntadores de tipo caracter) por si mismas ya son una dirección de memoria, por lo que no necesitan del ampersand a la hora de utilizarlos en scanf.
Volviendo al tema.
Como decía, scanf lee información con el formato que tu le indiques, asi que para que lea espacios y demás puedes hacerlo de la siguiente forma.
Con esto le inficas a scanf que lea TODO exepto el salto de línea.
Espero te sea de ayuda, Salu2