Dato che non hai spiegato il perchè ci vuole lo spazio prima del %, nell'espressione:
scanf(" %[^\n]", nomestringa);
immagino che sia nella "formula" per registrare da output tutti i caratteri escluso quello tra le parentesi quadre, dunque il newline, come dice nel forum che mi hai linkato (a proposito è una pagina abbastanza utile!). Dunque sintatticamente proprio senza lo spazio:
scanf("%[^\n]", nomestringa);
risulti sbagliato. Ok, grazie!!