我正在使用标准C中的密钥测试解密字符串。我正在输入字符串,输入我的替换项并根据替换历史构建密码。例如,如果我在字符串中用h替换c,我会将其作为"ch "
存储在字符串密码中,其中“表示我的字符串的开头和结尾。
我的问题是,当我试图通过我的字符串跑回来并将字符还原回原件时,我的角色会变得混乱并显示为心脏标志。对此有任何见解将非常感激,我确信我在某个地方出错非常简单。
char from[] = "";
char to[] = "";
for (int i = 0; i <= strlen(cipher); i++){
if (i == 0){
from[strlen(from)] = cipher[i];
}
else if(cipher[i-1] == ' '){
from[strlen(from)] = cipher[i];
}
else{
to[strlen(to)] = cipher[i];
}
}
for (int i = 0; i <= strlen(str); i++){
for(int j = 0; j <= strlen(to); j++){
if(str[i] == to[j]){
str[i] = from[j];
}
}
}
printf("\nUNSCRAMBLED STRING IS: %s" ,str);
cipher是保存密钥的char数组。 to []保存密码密钥中的第二个值。来自[]拥有我的第一个。 str是要解密的字符串的char数组。
答案 0 :(得分:3)
你有很多问题。
(1)一个大问题是您没有为from
和to
分配足够的存储空间 - 更改:
char from[] = ""; // this is equivalent to char from[1] = "";
char to[] = "";
到例如:
char from[256] = "";
char to[256] = "";
(其中256只是一些应该大于数据集大小的任意大小)。
(2)当你追加一个字符时,你需要正确地终止你的字符串,例如
if (i == 0){
from[strlen(from)] = cipher[i];
}
应该是:
if (i == 0){
int len = strlen(from);
from[len] = cipher[i];
from[len + 1] = '\0';
}
(3)当你遍历一个字符串时,你要用一个太多的字符索引,例如。
for (int i = 0; i <= strlen(cipher); i++){
应该是:
for (int i = 0; i < strlen(cipher); i++){