Все эти ответы верны.
Обратите внимание, что если у вас есть функция, требующая в качестве аргумента массив символов, и вы передаете этот аргумент следующим образом:
foo ("bar");
то же предупреждениебудет показано.В этом случае вы можете либо:
1) изменить его следующим образом, как описано в первом ответе:
void foo (char[] str) { printf(str); }
const char param[] = "bar";
foo (param);
2) рассмотреть возможность использования стандартной строки C ++, например:
void foo (std::string theParam) { std::cout << theParam; }
foo ("bar");
ИМХО, если реальная проблема с производительностью не затрагивается, и вы не работаете с библиотеками C или если вы создаете библиотеку C ++ для других пользователей, вам лучше работать с неизменяемыми строками C ++ иих набор функций.
Если требуется Unicode, поддержка в C ++ "ужасна", как объяснено здесь . Этот вопрос дает вам некоторые подсказки (в основном: используйте библиотеку IBM ICU).Если у вас уже есть Qt в вашем проекте, QString
также сделает то же самое, и Gettext.