为什么一个给我一个 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]
为其大写等效项。
另请注意(在大多数实现中)achar
可以具有负值(例如,ISO 8859-* 中的重音字符)。将负值传递给toupper
可以/将导致(严重的)问题——除非member_names
是一个数组,否则unsigned char
您通常希望unsigned char
在传递给之前先区分大小写toupper
:
member_names[2] = toupper(static_cast<unsigned char>(member_names[2]));