Ces réponses sont correctes.
Notez que si vous avez une fonction nécessitant un tableau de caractères comme argument et vous passez cet argument comme ceci:
foo ("bar");
le même message d'avertissement sera affiché. Dans ce cas, vous pouvez soit :
1) Modifier comme ceci, comme cela est expliqué dans la première réponse:
void foo (char[] str) { printf(str); }
const char param[] = "bar";
foo (param);
2) Envisager l'utilisation d'un standard C++ string, comme suit:
void foo (std::string theParam) { std::cout << theParam; }
foo ("bar");
À mon humble avis, tant que pas de réel problème de performance, et vous ne travaillez pas avec les bibliothèques C, ou si vous êtes à la construction d'une bibliothèque C++ pour les autres à utiliser, vous devriez plutôt travailler avec C++ immuable des chaînes et de leurs fonctionnalités.
Si Unicode est une exigence, l'appui en C++ est "terrible" comme expliqué ici.
Cette question vous donne quelques indices (principalement: l'utilisation d'IBM soins intensifs de la bibliothèque). Si vous avez déjà Qt dans votre projet, QString
feront aussi l'affaire, et il en sera de Gettext.