a gets() é perigosa pelo fato de que ela não tem prevenção alguma pro caso de o usuário digitar mais caracteres que o tamanho da cadeia onde serão armazenados estes. Tipo, se tu tem um vetor de 20 caracteres e o usuário digitar 27, vai dar "Segmentation Fault"... Com o fgets() você pode se previnir desse problema.

tem tbm um formato bem estranho do scanf que pega os espaços junto:

scanf("%[^\n]s",cadeia);

isso significa que ela vai pegando os caracteres teh surgir um "\n"...

mas tem akele velho problema da toamanho da cadeia... A scanf() não eh uma função muito segura...

usa a fgets que é melhor.

feito.