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

时间:2017-06-10 23:23:39

标签: c++ c++builder

我试图创建一个测试密码强度的简单函数。 密码输入编辑框,然后调用该函数返回其强度分数。 我不确定如何将值从编辑框传递给函数,因为值是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,等等。 我认为我没有正确转换类型,但我无法弄明白。

1 个答案:

答案 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());

    ...
}