为什么这些toupper在这样使用时工作方式不同
why does these toupper work different when utilized like this?
为什么一个给我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_names
是unsigned char
的数组,否则您通常希望在传递到toupper
:之前对unsigned char
进行大小写
member_names[2] = toupper(static_cast<unsigned char>(member_names[2]));
相关文章:
- 在 Eclipse 中添加库的工作方式是否与在 Visual Studio 中相同?
- OpenGL应用程序在不同的计算机上的工作方式不同
- 为什么我的代码在添加不相关的代码行后工作方式不同?
- wait_until在主线程而不是主线程中的工作方式不同吗? c ++
- 用于了解输入和输出流缓冲区实际工作方式的程序
- 查找函数在unordered_map中的工作方式是搜索键值
- 异步操作的 Asio 处理程序在其同步对应项正常工作时不会调用
- 尝试使用 Qt 库中的 QPixmap 将图像拆分为多个块。关于他的复制方法的工作方式,我有什么不明白的吗?
- 容器类别在STL中的工作方式
- Unity 的 HLSL/Cg 预处理器工作方式错误?
- 无法让我了解 cin.get 和 cout 在这里的工作方式
- 不了解C 集合的工作方式
- 有人可以解释C 操作员=此处的工作方式
- 了解 declval 在copy_assignment情况下的工作方式
- 打开文件的正确模式是什么,以便 seekp() 的工作方式与在默认模式下打开的文件相同
- 了解文件页在技术级别的工作方式
- 战俘的工作方式不同,详细解释
- 切换到新编译器后,SSCANF 的工作方式有所不同
- 我不明白放置新的工作方式以及如何释放内存
- 重载输入/输出运算符,为什么它以这种方式工作而不是以另一种方式工作