在c ++中修复类型转换警告的最佳方法

The*_*ple 3 c++ windows warnings types

所以,当我收到这样的警告时,我从来不知道该怎么做,所以我想要其他专业程序员的建议.当我得到那种警告(而不是错误)

警告C4267:'=':从'size_t'转换为'ULONG',可能会丢失数据

(省略其他上下文代码)

wchar_t pszName[CREDUI_MAX_USERNAME_LENGTH + 1] = L"user";
wchar_t pszPwd[CREDUI_MAX_PASSWORD_LENGTH + 1] = L"password";

// ..

COAUTHIDENTITY authIdent;

// ...

memset(&authIdent, 0, sizeof(COAUTHIDENTITY));
authIdent.PasswordLength = wcslen(pszPwd);
authIdent.UserLength = wcslen(pszName);
Run Code Online (Sandbox Code Playgroud)

问题显然是wcslen()返回size_t,authIdent.PasswordLength是ULONG.照顾这些警告的最佳方法是什么?是否有winapi函数,他们希望我使用而不是wcslen()?

编辑:感谢大家的所有好评!

Bat*_*eba 5

每个编译器警告需要根据具体情况进行处理.

您在平台上收到此警告,因为ULONG它是32位无符号,并且std::size_t是64位无符号.

但鉴于(1)你的字符串不太可能比a长ULONG,而且(2)两个无符号类型之间的转换总是很明确,我会做实用的事情并使用static_cast:

static_cast<ULONG>(wcslen(pszPwd))
Run Code Online (Sandbox Code Playgroud)