我正在研究一种凯撒密码程序,以免弄脏我的手,但我坚持下面的代码:
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。最后的加密字符串显示为空。但是,
printf
的char
语句会产生正确的值。代码有什么问题?
最佳答案
您不是要复制字符串的第一个字符(索引为0)。您确实将该字符设置为0(NUL),因此当您将encrypted
打印为字符串时,它看起来像是零长度。
删除if (i>0)
测试并无条件复制该字符。您还可以删除encrypted[0] = 0;
行,因为您将用字符串的第一个字符覆盖它。