将 C 数组中的一个字符转换为大写会给出 C4244 警告
Convert one character in a C array to uppercase gives C4244 warning
这是我的代码,我只想将字符串中的一个字符转换为大写。
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)
,但没有任何区别。
您收到警告是因为 TCHAR 是 char
(1 个字节)而 iChar
是 int
(很可能是 4 个字节)。为了将整数分配给 char,它必须截断 int
以适应 char
,这显然会丢失 3 个字节的数据。您可以通过将 iChar
显式转换为 TCHAR
来消除错误,如下所示:
sPassword[4] = (TCHAR) iChar;
或者,您可以将 iChar
声明为 TCHAR
,并在赋值时进行转换,如下所示:
TCHAR iChar = (TCHAR) toupper(sPassword[4]);
警告是由于 INT
对象缩小为 TCHAR
对象。这些类型的存在是为了提供一定的可修复性,并且可能与其他编译设置的范围相同。
TCHAR iChar = (TCHAR) toupper(sPassword[4]);
的回答是个好主意 - 当 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 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)
,但没有任何区别。
您收到警告是因为 TCHAR 是 char
(1 个字节)而 iChar
是 int
(很可能是 4 个字节)。为了将整数分配给 char,它必须截断 int
以适应 char
,这显然会丢失 3 个字节的数据。您可以通过将 iChar
显式转换为 TCHAR
来消除错误,如下所示:
sPassword[4] = (TCHAR) iChar;
或者,您可以将 iChar
声明为 TCHAR
,并在赋值时进行转换,如下所示:
TCHAR iChar = (TCHAR) toupper(sPassword[4]);
警告是由于 INT
对象缩小为 TCHAR
对象。这些类型的存在是为了提供一定的可修复性,并且可能与其他编译设置的范围相同。
TCHAR iChar = (TCHAR) toupper(sPassword[4]);
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;