为什么这些toupper在这样使用时会有所不同?

时间:2015-04-25 01:27:10

标签: c++ toupper

为什么一个人给我一个int而另一个不给我?:

    toupper(member_names[2]);

    member_names[2] = toupper(member_names[2]);

2 个答案:

答案 0 :(得分:1)

toupper函数不会修改其参数。 所以这个电话:

toupper(member_names[2]);

返回您忽略的值。

另一个版本从toupper函数获取值并将其分配给member_names[2],从而修改先前的值。

答案 1 :(得分:0)

toupper接受一个字符(由于大多数历史原因而编码为int)并返回该字符的大写等效字符。

因此,您的第一个版本并没有真正完成任何事情。你的第二个将member_names[2]转换为大写的大写字母。

另请注意(在大多数实现中)char可以具有负值(例如,ISO 8859- *中的重音字符)。将负值传递给toupper会导致(严重)问题 - 除非member_namesunsigned char的数组,否则您通常希望在传递之前将其置于unsigned chartoupper

member_names[2] = toupper(static_cast<unsigned char>(member_names[2]));