Точка останова находится в шифре строки

0

Я написал небольшой алгоритм шифрования строк, очень простой.

Это оно:

int chrCipher (int str)
{
    char a[] = "abcdefghijklmnopqrstuvwxyz";
    char b[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char *c;
    if ((c=strchr(a,str))!=NULL)
        return a[((c-a)+13)%26];
    if ((c=strchr(b,str))!=NULL)
        return b[((c-b)+13)%26];
    else return str;
}

void strCipher (char *dst, char *src)
{
    while(*src)
    {
        *src=chrCipher(*src); // BREAKPOINT HERE
        *++dst;
        *++src;
    }
}

Когда я запускаю свою программу в MSVS, я получаю точку останова в этом разделе, и в ней говорится: "Необработанное исключение в 0x0169b823: 0xC0000006 acess нарушение записи 0x01395474"

В чем проблема, и как я могу это исправить?

  • 0
    Почему вы используете *++dst; вместо просто ++dst; ?
Теги:
pointers
winapi
cryptography

1 ответ

2
Лучший ответ

Я думаю, ваша проблема связана с неправильным обновлением src а не dst

void strCipher (char *dst, char *src)
{
    while(*src)
    {
        *src=chrCipher(*src); // <<== did you mean *dst = chrCipher(*src); here??
        *++dst;
        *++src;
    }
}

Также не требуется разыменовывать строки, которые обновляют указатели.

Я бы добавил const в параметр src...

void strCipher (char *dst, const char *src); // prototype
  • 0
    ВАУ! Ошибка новичка ... Я не могу поверить, что я пропустил это ... спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню