Rappels sur les const
Il ne faut pas confondre un :
const char * (la chaine pointée est constante)
char * const (le pointeur est constant)
const char * const (les deux sont constants)
Pour ton problème...
Je rappelle qu'en C++ tu peux utiliser les référence et encore mieux les std::string :
#include <string>
void f(std::string & s=""){
s = "essai";
}
Références et pointeurs
A noter que en C et en C++ les paramètres sont des recopies.
- un passage par pointeur va consister à empiler l'adresse de la variable pointée. Cette adresse est recopiée en mémoire mais pas la zone pointée. C'est pour ça qu'en C / C++ on utilise des pointeurs ou des références pour modifier la valeur d'un paramètre (plus exactement la valeur d'une variable pointée par un paramètre).
- on doit au maximum utiliser les références pour que le programme ne perde pas du temps à recopier inutilement des paramètre. Par exemple si je manipule un graphe de grande taille :
void f(graph_t & g); // rapide
void g(graph_t * g); // rapide
void h(graph_t g): // lent !!! car on recopie le graphe à chaque appel de h
Et les const...
Il faut par ailleurs veiller à bien mettre les const (cf début du post) quand ils sont justifiés. Typiquement :
#include <string>
#include <iostream>
void affiche(std::string & s){
std::cout << s << std::endl;
}
void affiche2(const std::string & s){
std::cout << s << std::endl;
}
int main(){
const std::string s = "plop";
affiche(s); //erreur de compilation car affiche de garantit pas la constance
affiche2(s); //ok
return 0;
}
Bonne chance

