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

C++ 如何将编辑文本值传递给函数,c++,c++builder,C++,C++builder,我想做一个简单的函数来测试密码的强度。 在编辑框中输入密码,然后调用函数,返回其强度的分数。 我不确定如何将值从编辑框传递到函数,因为该值是Unicode字符串 这是函数的第一部分 extern "C" int __declspec(dllexport) calculateStrength(const wchar_t* password){ bool hasUpper = false; bool hasLower = false; bool hasDigit = false; bool ha

我想做一个简单的函数来测试密码的强度。 在编辑框中输入密码,然后调用函数,返回其强度的分数。 我不确定如何将值从编辑框传递到函数,因为该值是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;
.....
我对这一切都很陌生,这是基于几个小时的谷歌搜索。 当我只输入一个字母并输入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());

    ...
}

您需要使用
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());

    ...
}

我不确定您的问题的答案,但您在字符串上的循环将超过数组的末尾。除非您使用的是某种单索引运算符[]。
sizeof(password)
sizeof(wchar\u t*)
,因此是4或8(32位或64位平台)。它不是密码的长度。还请注意,在使用指针密码时,字符串可能已被释放,内存可能已被重新使用。而是直接传递:
calculateStrength(EnterPass->Text.t\u str())
。这也可以解释
ShowMessage
(需要字符串,顺便说一句)的奇怪结果。@RudyVelthuis:根本不要使用
t_str()
。使用
c_str()
w_str()
,甚至使用
data()
。我不确定您的问题的答案,但您在字符串上的循环将超过数组的结尾。除非您使用的是某种单索引运算符[]。
sizeof(password)
sizeof(wchar\u t*)
,因此是4或8(32位或64位平台)。它不是密码的长度。还请注意,在使用指针密码时,字符串可能已被释放,内存可能已被重新使用。而是直接传递:
calculateStrength(EnterPass->Text.t\u str())
。这也可以解释
ShowMessage
(需要字符串,顺便说一句)的奇怪结果。@RudyVelthuis:根本不要使用
t_str()
。使用
c_str()
w_str()
,甚至
data()