C解密程序-检测到堆损坏

C解密程序-检测到堆损坏,c,string,encryption,C,String,Encryption,我试图写一个非常简单的代码 基本上,我从用户那里得到一个“加密”字符串,我的代码使用以下规则对其进行解密: 从字符串的第一个字母减去1,从第二个字母减去2,从第三个字母减去3,依此类推。空格保持不变 我写了这段代码: char* q4(char* str_in) { char* str_out; int str_out_length,i,temp; str_out_length=strlen(str_in)+1; //+1 for null terminator

我试图写一个非常简单的代码

基本上,我从用户那里得到一个“加密”字符串,我的代码使用以下规则对其进行解密:

从字符串的第一个字母减去1,从第二个字母减去2,从第三个字母减去3,依此类推。空格保持不变

我写了这段代码:

char* q4(char* str_in)
{
    char* str_out;
    int str_out_length,i,temp;
    str_out_length=strlen(str_in)+1; //+1 for null terminator
    str_out=(char*)malloc(sizeof(char)*str_out_length);
    str_out[str_out_length]='\0'; //null terminator at last index
    for(i=0;i<str_out_length;i++)
    {
        if(str_in[i]!=' ')
        {
            temp=str_in[i];
            str_out[i]=(char)(temp-i-1);
        }
        else
            str_out[i]=str_in[i];
    }
    return str_out;
}
char*q4(char*str\u in)
{
字符*str_out;
int str_out_长度,i,温度;
str_out_length=strlen(str_in)+1;//+1表示空终止符
str_out=(char*)malloc(sizeof(char)*str_out长度);
str_out[str_out_length]='\0';//最后一个索引处的null终止符
对于(i=0;i
似乎终止符位于分配的缓冲区后面一个字节。请重试

str_out[str_out_length - 1]='\0';
同样地,也许

for(i=0;i<str_out_length;i++)

然后使用
str\u out\u length
,不进行
-1
-校正


更新(阅读评论后)

输出

亚瑟·柯南·道尔、夏洛克·福尔摩斯和沃森医生


是的,我明白了,这就是问题所在。感谢它现在起作用了。无论如何,我被要求解密的文本似乎是胡言乱语。第一个单词是亚瑟,但第二个单词没有意义。我被要求解密“Btwlzx Dqqes Eq | pj2 Tjhvqujs iqqqjy bpg Eqfxtx Xcwwtt”@OriaGruber我试图在空格处重置计数器。然后我得到了一个“亚瑟·柯南·道尔、夏洛克·福尔摩斯和沃森医生”。
for(i=0;i<str_out_length;i++)
for(i=0;i<str_out_length-1;i++)
str_out_length=strlen(str_in)+1; //+1 for null terminator
str_out=(char*)malloc(sizeof(char)*str_out_length);
str_out_length=strlen(str_in);
str_out=(char*)malloc(sizeof(char)*(str_out_length+1)); //+1 for null terminator
print_decrypted("Btwlzx Dqqes Eq|pj2 Tjhvqujs Iqoqjy bpg Eqfxtx Xcwwtt");
void print_decrypted(char* str)
{
    int k = 0;
    for (int i = 0; str[i] != '\0'; i++)
    if (str[i] != ' ')
    {
        printf("%c", str[i] - k - 1);
        k++;
    }
    else
    {
        printf(" ");
        k = 0;
    }
    printf("\n");
}