为什么这个关于字符串toupper的代码示例的结果是什么?

时间:2013-05-10 06:32:12

标签: c++ string

string str("fujian");
string newstr;
transform(str.begin(), str.end(), newstr.begin(), ::toupper);
cout << newstr << endl;

为什么这个关于字符串toupper的代码示例的结果是什么?

2 个答案:

答案 0 :(得分:3)

您的代码写在newstr的末尾,因此有undefined behaviour

请尝试以下任一方法:

// version 1
string str("fujian");
string newstr(str);
transform(newstr.begin(), newstr.end(), newstr.begin(), ::toupper);
cout << newstr << endl;

// version 2
string str("fujian");
string newstr;
transform(str.begin(), str.end(), std::back_inserter(newstr), ::toupper);
cout << newstr << endl;

答案 1 :(得分:1)

您没有为newstr分配任何空间。

在此处查看更多内容:C++ std::transform() and toupper() ..why does this fail?