0

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

    toupper(member_names[2]);

和:

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

2 回答 2

1

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

toupper(member_names[2]);

返回一个您忽略的值。

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

于 2015-04-25T01:29:24.273 回答
0

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]));
于 2015-04-25T01:29:01.800 回答