Функция шифрования в C ++ - PullRequest
0 голосов
/ 11 февраля 2012

Итак, я попытался создать функцию в C ++, которая преобразует каждый введенный пользователем символ в «*». Но когда я запускаю файл .exe (CMD), он запрашивает пароль в порядке, однако, когда я ввожу слово, он выдает мне сообщение об ошибке: «Отладка подтверждения не удалась». Есть идеи, почему это происходит?

Вот мой код:

#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "string"
#include "ctype.h"

using namespace std;

void encrypt(char string[], int len)
{
    for (int count = 0; count < len; count++)
        if (isalpha (string [count] ) )
            string[count] = '*';
}


int _tmain(int argc, _TCHAR* argv[])
{
    char Text[40];
    int Size = strlen(Text);
    cout << "Enter your desired password: ";
    cin >> Text;
    encrypt(Text, Size);
    cout << Text << endl;
    _getch();
    return 0;
}

Ответы [ 5 ]

2 голосов
/ 11 февраля 2012

Просто переместите "int Size = strlen (Text) после строки" cin >> Text; "

1 голос
/ 11 февраля 2012

Ваш цикл for не учитывает длину вводимого текста. Вместо этого он предоставляет Size, вызывая strlen для неинициализированного массива char, который обычно будет полон случайных значений. Ваш компилятор должен предупредить вас об этом . Не игнорируйте предупреждения все время.

char Text[40];
int Size = strlen(Text);

Поскольку strlen следует последовательности символов до тех пор, пока не найдет NUL (0x0), он, вероятно, выпадает из конца 40-символьного пространства в какую-то другую часть вашего стека, поэтому выдается ошибка времени выполнения (нарушение сегментации)

0 голосов
/ 03 октября 2013

Вы положили строку

int ln 〓 strlen(Text);

слишком рано, так как текст не был введен пользователем. Вам нужно переместить его после строки:

cin >> Text;

Чтобы это работало.

0 голосов
/ 11 февраля 2012

Вы взяли размер текста до его ввода.

...
int _tmain(int argc, _TCHAR* argv[])
{
    char Text[40];
    // int Size = strlen(Text); // to early
    cout << "Enter your desired password: ";
    cin >> Text;
    int Size = strlen(Text); // now Text is filled and the Size will not change.
    encrypt(Text, Size);
    cout << Text << endl;
    _getch();
    return 0;
}
0 голосов
/ 11 февраля 2012

strlen (Text) возвращает длину строки путем поиска '\ 0'. Вы должны сделать это после того, как пользователь ввел текст.

char Text[40];
cout << "Enter your desired password: ";
cin >> Text;
int Size = strlen(Text);
encrypt(Text, Size);
...