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

标签 c++ c++builder

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

    ...
}

关于c++ - 如何将编辑文本值传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44478997/

相关文章:

c++ - 如果我的进程在事件之间处于空闲状态,为什么延迟会更大?

c++ - 我可以在头文件中省略智能指针的类型参数吗?

C++:使用owl重新编译旧代码

带有 vcl 的 C++ : closing secondary form does not end process

java - 从文件夹中排除 cpp 而不删除

c++ - 当所有信息都在头文件中时未定义的函数引用

c++ - c - 这 2 个 const 是什么意思?

string - Borland C++ Builder 6 和字符串连接

c++ - 包括 DShow.h 会破坏 BDS2006 上的 VCL AnsiString::sprintf()

C++Builder 强制编译一个特殊文件