Привыкайте объявлять строковые параметры в качестве константной ссылки.
Вместо этого:
void addMessage(string s)
{
...
}
Это:
void addMessage(const string& s)
{
...
}
Мало того, что этого можно избежать делая копию строки, он также позволяет передавать string
экземпляров, а также string literals
и char*
переменных, которые указывают на строки. Таким образом, вышеприведенное включает все следующее:
addMessage("Foobar");
const char* psz = <some other string>
addMessage(psz);
std::string s = "A string";
addMessage(s);
А затем для правильной печати строки с помощью printf
, используйте функцию-член .c_str()
, чтобы получить адрес указателя содержимого.
Вместо этого:
printf("%s\n", s);
Это:
printf("%s\n", s.c_str());
И само собой разумеется, что cout
предпочтительнее, чем printf
:
cout << s << endl;
В целом:
static vector<string> added_messages;
static void addMessage(const string& message);
static void displayMessages();
int main()
{
string message = "Testing 1 2 3";
const char* psz = "Yet, another messsage);
addMessage(message);
addMessage("Another Message as a string literal);
addMessage(psz);
// sample printf statements
printf("%s\n", message.c_str());
printf("%s\n", psz);
// sample cout statements - notice it can handle both pointers and string instances
cout << message << endl;
cout << psz << endl;
cout << "Hello World" << endl;
return 0;
}
void addMessage(const string& s)
{
added_messages.push_back(s);
printf("%s\n", s.c_str());
}
void displayMessages()
{
for (const string& i : added_messages)
{
printf("%s\n", i.c_str());
}
added_messages.clear();
}