我试图创建一个测试密码强度的简单函数。 密码输入编辑框,然后调用该函数返回其强度分数。 我不确定如何将值从编辑框传递给函数,因为值是Unicode String。
这是该功能的第一部分
extern "C" int __declspec(dllexport) calculateStrength(const wchar_t*
password){
bool hasUpper = false;
bool hasLower = false;
bool hasDigit = false;
bool hasSymbol = false;
int PassScore = 50;
for(int i = 1; i <= sizeof(password); ++i)
{
if( islower(password[i]) )
hasLower = true;
.....
这就是我称之为的地方
void __fastcall TForm1::Button1Click(TObject *Sender){
const wchar_t* password = EnterPass->Text.t_str();
int PassScore = calculateStrength(password);
....
我对这一切都很陌生,这是基于谷歌搜索的时间。
当我只输入一个字母并且仅输出ShowMessage(wcslen(password))
时,输出为50,对于超过一个字符,它是75,等等。
我认为我没有正确转换类型,但我无法弄明白。
答案 0 :(得分:0)
您需要使用wcslen()
代替sizeof()
,
像这样:
extern "C" int __declspec(dllexport) calculateStrength(const wchar_t* password)
{
bool hasUpper = false;
bool hasLower = false;
bool hasDigit = false;
bool hasSymbol = false;
int PassScore = 50;
int len = wcslen(password);
for(int i = 0; i < len; ++i)
{
if (islower(password[i]))
hasLower = true;
...
}
return PassScore;
}
然后你可以这样称呼它:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
UnicodeString password = EnterPass->Text;
int PassScore = calculateStrength(password.c_str());
// or simply:
// int PassScore = calculateStrength(EnterPass->Text.c_str());
...
}