为什么这些toupper在这样使用时工作方式不同

why does these toupper work different when utilized like this?

本文关键字:工作 方式不 toupper 为什么      更新时间:2023-10-16

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

toupper(member_names[2]);

和:

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

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

toupper(member_names[2]);

返回一个您忽略的值。

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

toupper获取一个字符(由于历史原因编码为int),并返回该字符的大写等效值。

因此,您的第一个版本并没有真正实现任何目标。您的第二个表达式将member_names[2]转换为大写等效值。

还要注意(在大多数实现中)char可以具有负值(例如,ISO 8859-*中的重音字符)。将负值传递给toupper可能/将导致(严重)问题——除非member_namesunsigned char的数组,否则您通常希望在传递到toupper:之前对unsigned char进行大小写

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