将 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 个字节)而 iCharint(很可能是 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]); 的回答是个好主意 - 当 TCHARchar 或朋友时。

然而还有一个更深层次的问题: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;