【发布时间】:2015-02-19 10:15:38
【问题描述】:
我找到了这个用于异或加密的代码,它可以工作
string encryptDecrypt(string toEncrypt)
{
char key = 'K'; //Any char will work
string output = toEncrypt;
int z = toEncrypt.size();
for (int i = 0; i < z; i++)
{
output[i] = toEncrypt[i] ^ key;
}
return output;
}
int main(int argc, const char * argv[])
{
string encrypted = encryptDecrypt("kylewbanks.com");
string decrypted = encryptDecrypt(encrypted);
return 0;
}
但是当我把它改成这种形式时:
CHAR* encryptDecrypt(CHAR* toEncrypt)
{
char key = 'K'; //Any char will work
CHAR* output = toEncrypt;
for (int i = 0; i < strlen(toEncrypt); i++)
{
output[i] = toEncrypt[i] ^ key;
}
return output;
}
int main(int argc, CHAR* argv[])
{
CHAR* encrypted = encryptDecrypt("kylewbanks.com");
CHAR* decrypted = encryptDecrypt(encrypted);
return 0;
}
程序中断并显示此消息:访问冲突写入位置 0x001CCC90
我的变量需要使用 CHAR* 或 WCHAR*(我没有使用字符串的权限)
问题是:
1- 第二个代码有什么问题?
2- 如何将键更改为单词而不是字符?
感谢您的帮助:)
编辑:
问题是它在第 7 行之后立即中断
它根本不做这行:
output[i] = toEncrypt[i] ^ key;
【问题讨论】:
-
string不是标准的 C 类型,因此您的问题不容易重现。你确定这不是 C++,还是应该包含一些非标准的头文件? -
我在我的问题中说我没有使用字符串的权限,我找到了一个 C++ 代码,但我必须编写一个 C 代码。这是我的问题...
-
这一行
CHAR* encrypted = encryptDecrypt("kylewbanks.com");试图更改一个只读 字符串(我怀疑string声明在原文中屏蔽了你)。见stackoverflow.com/questions/1455970/cannot-modify-c-string
标签: c