将 C 数组中的一个字符转换为大写会给出 C4244 警告

Jef*_*ffR 1 c compiler-warnings toupper

这是我的代码,我想将字符串中的一个字符转换为大写。

TCHAR sPassword[16] = L"password";
INT iChar = toupper(sPassword[4]);
sPassword[4] = iChar;
Run Code Online (Sandbox Code Playgroud)

它运行正常,但我收到警告:

warning C4244: '=': conversion from 'int' to '_Ty', possible loss of data
Run Code Online (Sandbox Code Playgroud)

我试过铸造iChar(INT)但没有任何区别。

chu*_*ica 5

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

TCHAR iChar = (TCHAR) toupper(sPassword[4]);正如@Zsigmond Szabó所回答的那样是一个好主意 - 什么时候TCHARchar朋友。

然而,有躺着一个更深层次的问题:toupper()是单字节大小写转换和时是不是最好的转换功能使用TCHAR不是char等。

代码也可能是:

int iChar = toupper(sPassword[4]);  // if toupper must be used
sPassword[4] = (TCHAR) iChar;
Run Code Online (Sandbox Code Playgroud)

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


TCHAR 不是标准的 C 类型或定义。

假设这是一个 MS TCHAR,请考虑_totupper()

TCHAR iChar =  (TCHAR) _totupper(sPassword[4]);
sPassword[4] = iChar;
Run Code Online (Sandbox Code Playgroud)