如何解决将 C 数组中的一个字符转换为大写会给出 C4244 警告
这是我的代码,我想将字符串中的一个字符转换为大写。
TCHAR sPassword[16] = L"password";
INT iChar = toupper(sPassword[4]);
sPassword[4] = iChar;
它运行正常,但我收到警告:
warning C4244: '=': conversion from 'int' to '_Ty',possible loss of data
我尝试将 iChar
与 (INT)
一起转换,但没有任何区别。
解决方法
警告是由于 INT
对象缩小为 TCHAR
对象。这些类型的存在是为了提供一定的可修复性,并且可能与其他编译设置的范围类似。
TCHAR iChar = (TCHAR) toupper(sPassword[4]);
由 @Zsigmond Szabó 回答是一个好主意 - 当 TCHAR
是 char
或朋友时。
然而,还有一个更深层次的问题:toupper()
用于单字节大小写转换,当 TCHAR
不是 char
等时,它不是最好的转换函数。
代码也可能是:
int iChar = toupper(sPassword[4]); // if toupper must be used
sPassword[4] = (TCHAR) iChar;
为了处理一般的 TCHAR
大小写转换,代码需要更大的灵活性。
TCHAR
不是标准的 C 类型或定义。
假设这是一个 MS TCHAR
,考虑 _totupper()
。
TCHAR iChar = (TCHAR) _totupper(sPassword[4]);
sPassword[4] = iChar;
,
您收到警告是因为 TCHAR 是一个 char
(1 个字节),而 iChar
是一个 int
(很可能是 4 个字节)。为了将整数分配给字符,它必须截断 int
以适应 char
,这显然会丢失 3 个字节的数据。您可以通过将 iChar
显式转换为 TCHAR
来消除错误,如下所示:
sPassword[4] = (TCHAR) iChar;
或者,您可以将 iChar
声明为 TCHAR
,并在分配时进行转换,如下所示:
TCHAR iChar = (TCHAR) toupper(sPassword[4]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。