我正在研究一种凯撒密码程序,以免弄脏我的手,但我坚持下面的代码:

char * encrypt(char *input) {
    int length = strlen(input);
    char *encrypted;

    encrypted = malloc(length+1);
    encrypted[0] = 0;

    int i;
    for(i=0; i < length; i++) {
        printf("%c\n", input[i]);
        if (i>0) {
            encrypted[i] = input[i];
        }
    }

    encrypted[length] = '\0';
    printf("Encrypted: %s\n", encrypted);
    return encrypted;
}


现在,我只是想弄清楚为什么我无法将输入的char复制为char。最后的加密字符串显示为空。但是,printfchar语句会产生正确的值。

代码有什么问题?

最佳答案

您不是要复制字符串的第一个字符(索引为0)。您确实将该字符设置为0(NUL),因此当您将encrypted打印为字符串时,它看起来像是零长度。

删除if (i>0)测试并无条件复制该字符。您还可以删除encrypted[0] = 0;行,因为您将用字符串的第一个字符覆盖它。

10-06 05:56