断点位于字符串加密密码中

时间:2014-03-12 22:29:04

标签: c++ c winapi pointers cryptography

我写了一个小字符串加密算法,非常简单。

就是这样:

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访问违规写入0x01395474"

这里有什么问题,我该如何解决?

1 个答案:

答案 0 :(得分: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