C++ 如何将编辑文本值传递给函数
我想做一个简单的函数来测试密码的强度。 在编辑框中输入密码,然后调用函数,返回其强度的分数。 我不确定如何将值从编辑框传递到函数,因为该值是Unicode字符串 这是函数的第一部分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
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()
。