我正在尝试制作一个测试密码强度的简单函数。密码被输入到一个编辑框中,然后调用返回密码强度分数的函数。我不确定如何将值从编辑框传递给函数,因为该值是 Unicode 字符串。
这是函数的第一部分
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,依此类推。我想我没有正确转换类型,但我就是想不通。
你需要使用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());
...
}
我是一名优秀的程序员,十分优秀!