Cambia tanto!!!!
Tu usi un oggetto stringa, che è una cosa completamente diversa rispetto ad char *!!
Il tuo programma funziona perchè quando tu fai "return a " viene invocato il costruttore di coppia della classe string che crea una coppia dell'oggetto, e come ritorno della funzione rende proprio questa coppia....
Ma questo avviene perchè è un oggetto del c++, mentre quello che ho postato io è un classico esempio di gestione delle stringhe in c, che non sono altro che array di caratteri e che vanno trattati con le dovute precauzioni!!!

Rispondi quotando