需要使用cstrings进行任务,所以请耐心等待,因为我对这个概念不熟悉。
分配的目的是在函数中输入密码,根据某些条件对其进行验证,然后反转密码并再次验证。共有三个功能:一个用于从用户获取密码,一个用于验证,另一个用于反转输入的内容。
注意:在验证期间,必须在返回main的无效消息中解决未满足的每个条件。
主:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <cctype>
#include <string>
using namespace std;
char* Get_Pass(char p_word[]);
char* Valid_Pass(char p_word[]);
//char* Reverse_Pass(char p_word[]);
int main()
{
const int SIZE = 31;
char password[SIZE];
char* rtn_stg = new char[SIZE];
char* rtn_ptr;
rtn_stg = Get_Pass(password);
rtn_ptr = rtn_stg;
cout << Valid_Pass(rtn_stg);
//cout << Reverse_Pass(rtn_string, SIZE);
delete[] rtn_ptr;
cout << "\n\n";
system("pause");
return 0;
}
我遇到的问题是双重的;第一个功能正常。如果我禁用了其他所有内容并将结果发送回main,它将打印我输入的内容。将密码传递给第二个函数进行验证时,它会输出垃圾代码以及未满足条件的消息,例如:
“输入验证密码:你好 ══════════════════════════════════════════════════ ══════════════════════════════ ═══════════════════════════════════════════════²²²²▌▌ ▌▌▌·ò= uYPassword必须是si x个字符长。密码必须包含一位数。“
这是有问题的功能:
char* Valid_Pass(char p_word[])
{
int char_count = 0, digi_count = 0, up_count = 0, low_count = 0, index = 0;
char mess_1[] = "Password must be six characters long. ";
char mess_2[] = "Password must contain one digit. ";
char mess_3[] = "Password must contain one upper and lower case letter. ";
char mess_4[] = "Password valid.";
const int SIZE = strlen(mess_1) + strlen(mess_2) + strlen(mess_3) + 1;
char* out_message = new char[SIZE];
while (p_word[index] != '\0')
{
if (isalpha(p_word[index]))
char_count++;
if (isdigit(p_word[index]))
digi_count++;
if (isupper(p_word[index]))
up_count++;
if (islower(p_word[index]))
low_count++;
index++;
}
if (index < 6)
strcat(out_message, mess_1);
if (digi_count < 1)
strcat(out_message, mess_2);
if (up_count < 1 && low_count < 1)
strcat(out_message, mess_3);
//if(index )
//out_message = mess_4;
return out_message;
}
最重要的是,在执行时,它会触发“delete [] rtn_ptr”的断点。
对此有任何见解将不胜感激。就像我上面所说的那样,我是cstrings的新手,在这里找不到解决我遇到的问题的解决方案。
谢谢!
答案 0 :(得分:0)
您的问题是由strcat
使用message_out
作为参数引起的。
strcat
的参数需要以空字符结尾的字符串。在您的情况下,您已为message_out
分配了内存,但在第一次调用strcat
之前尚未对其进行任何初始化。因此,您的程序具有未定义的行为。
确保在使用strcat
之前将其初始化为空字符串。
out_message[0] = '\0';
if (index < 6)
strcat(out_message, mess_1);
if (digi_count < 1)
strcat(out_message, mess_2);
if (up_count < 1 && low_count < 1)
strcat(out_message, mess_3);