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

why does these toupper work different when utilized like this?

为什么一个给我一个整数而另一个没有?:

    toupper(member_names[2]);

和:

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

toupper 接受一个字符(出于大多数历史原因编码为 int)和 returns 该字符的大写形式。

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

另请注意(在大多数实现中)a char 可以具有负值(例如,ISO 8859-* 中的重音字符)。将负值传递给 toupper can/will 会导致(严重的)问题——除非 member_namesunsigned char 的数组,您通常希望大小写为 unsigned char在传递给 toupper 之前:

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

toupper 函数不修改其参数。 所以这个调用:

toupper(member_names[2]);

returns 您忽略的值。

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