Con char* non fai una stringa!
Con char* PUNTI ad una stringa, e non è detto che tu la possa modificare.
char* str = "Ciao mondo";
questo è il frammento di codice che inganna quasi tutti, in realtà il compilatore salva la scritta "Ciao Mondo" in un'area della memoria (molto probabilmente in quella del codice, ma non è detto) con "char* str" tu punti a quell'area della memoria ed accedi li, a seconda del compilatore potrai o meno editarla.
Ad esempio gcc la crea nell'area del codice e quindi impossibile da modificare e dunque una cosa come questa:
*str = '\0';
provocherà un errore, in Digital Mars invece la stringa viene salvata nell'heap ( o comunque in un'area di memoria editabile) e quindi il codice scritto sopra funzionerà.
è comunque buona regola per chi non conosce pienamente il proprio compilatore (cosa che bisognerebbe approfondire subito) pensare che le stringhe dichiarate in quel modo siano costanti e quindi non modificabili.
Agli inizii aiuta molto scrivere
const char* str = "Ciao Mondo";
Anche se in realtà tale dicitura ha un significato diverso, ovvero un puntatore costante e non una stringa costante.
In c poi non esistono lestringhe ma i vettori di caratteri, piccolo accorgimento di nomi che spesso aiuta ad imparare tali vettori correttamente