将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

我试着用(INT)铸造iChar,但没有什么区别。

警告是由于INT对象缩小为TCHAR对象。这些类型的存在无疑提供了可修复性,并且可能与其他编译设置的范围相同。

TCHARchar或朋友时,@ZsigmondSzabó回答的TCHAR iChar = (TCHAR) toupper(sPassword[4]);是个好主意。

然而,还有一个更深层次的问题:toupper()用于单字节大小写转换,当TCHAR不是char等时,它不是最好的转换函数。

代码可能是:

int iChar = toupper(sPassword[4]);  // if toupper must be used
sPassword[4] = (TCHAR) iChar;

为了处理一般的TCHAR大小写转换,代码需要更大的灵活性。


TCHAR既不是标准的C类型,也不是定义。

假设这是MSTCHAR,则考虑_totupper()

TCHAR iChar =  (TCHAR) _totupper(sPassword[4]);
sPassword[4] = iChar;

您收到警告,因为TCHAR是char(1字节(,而iCharint(很可能是4字节(。为了给一个字符分配一个整数,它必须截断int以适应char,这显然会丢失3字节的数据。您可以通过显式地将iChar强制转换为TCHAR来消除错误,如下所示:

sPassword[4] = (TCHAR) iChar;

或者,您可以将iChar声明为TCHAR,并在分配时进行转换,如下所示:

TCHAR iChar = (TCHAR) toupper(sPassword[4]);

相关内容

  • 没有找到相关文章

最新更新