Salve a tutti!

Sto scrivendo un semplice programmino che legga una stringa in ingresso, separi le parole e le riscriva una per riga.

Sapete spiegarmi perchè questo codice riceve la stringa in modo corretto ma poi quando la riscrive parola per parola aggiunge caratteri strani?
(es.: inserendo "ciao prova stringa" riporta:

ciaoX "
prova "
stringa

...virgolette comprese!!)

codice:
#include <iostream.h>
#define LUNGHEZZA_STRINGA 50

typedef char string[LUNGHEZZA_STRINGA];
string stringa; // variabile che conterrà l'input iniziale

// Prototipi delle funzioni utilizzate
void leggi_stringa(string&);

// Programma principale
main()
{
 string temp;
 int i=0,j=0,k=0;
 
 // leggo la stringa da ordinare
 leggi_stringa(stringa);
 cout << endl << "la stringa e': " << stringa << endl << endl;
 
 // Scorro la stringa e separo le parole, mandandole in cout;
 while(1)
 {
   if (stringa[i]==' ')
   {
       cout << temp << endl;
       i++;                             
       for (k=0;k<j; k++)
       {
	     temp[k]= ' ';
	   }
	   
	   j=0;
   }
   else if (stringa[i]=='\0')
   {
      cout << temp;
      break;
   }
   else
   {
     temp[j]=stringa[i];
     i++;
     j++;
   }
 }
// FINE DEL MAIN //
}

// Dichiarazione delle funzioni utilizzate
void leggi_stringa(string &result)
{
 string temp_string;
 char temp;
 int i=0;
 
 cout << "Inserire una stringa di lunghezza NON superiore" << endl
      << "ai 50 caratteri ('0' per terminare la lettura):"
      << endl << endl;
 i=0;
 cin.unsetf(ios::skipws);
 cin >> temp;
 while ((temp!='0') && (i<LUNGHEZZA_STRINGA))
 {
   temp_string[i]=temp;
   i++;
   cin >> temp;
 }
 result=temp_string;
}