Funziona anche in C..ma se è scritto bene...

Tu hai scritto:

do{
printf("%c%c\n",*(punt+a),*(punt+b));
++b;
}while(*(punt+a));

il che significa che continui a stampare *(punt+b) ad ogni iterazione finche *(punt+a) non è nullo...ma ad ogni iterazione incrementi b e non a, cosi b scorre la stringa mentre a punta sempre all'inizio e non è mai null, quindi con b vai fuori dalla stringa producendo l'errore,