如何将“编辑文本值”传递给函数

How to pass Edit Text Value to a function

本文关键字:函数 编辑文本值 编辑 文本      更新时间:2023-10-16

我正在尝试制作一个简单的函数来测试密码的强度。将密码输入到编辑框中,然后调用该函数,该函数返回其强度的分数。我不确定如何将值从编辑框传递到函数,因为该值是 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());
    ...
}