在C中显示错误的字符

时间:2015-03-04 22:30:48

标签: c

我正在使用标准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数组。

1 个答案:

答案 0 :(得分:3)

你有很多问题。

(1)一个大问题是您没有为fromto分配足够的存储空间 - 更改:

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++){