La gets ha il problema di non controllare la lunghezza della stringa che viene effettivamente data in input, quindi viene sconsigliata in quanto può causare problemi di buffer overflow.
Per leggere una stringa è possibile utilizzare la funzione
fgets , alla quale deve essere passata anche la lunghezza massima della stringa (effettivamente ho riscontrato anche io gli stessi problemi con la scanf, ma sinceramente non so se c'è un modo per risolverli)...