【发布时间】:2017-08-09 07:14:24
【问题描述】:
我正在开发一种凯撒密码程序来弄脏我的手,但我被以下代码卡住了:
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 语句会产生正确的值。
代码有什么问题?
【问题讨论】:
-
删除
encrypted[0] = 0并删除if (i > 0) -
请描述在问题中您看到的行为以及与您的预期有何不同。
-
用C编译并运行一个hello world示例后首先要学习的是如何使用调试器。在调试器的帮助下,您将能够发现 c 字符串是 0 终止的。由于您的行
encrypted[0] = 0以及您从未在循环中更改该值 (if(i > 0)...) 的事实,您会在最后一个 printf 输出中看到一个空字符串。 -
感谢大家的帮助!我以为我读过我必须在第一个元素上用 0 初始化数组。在重新阅读了我的 C 书之后,我现在意识到我误读了那部分。再次感谢!
标签: c arrays string pointers char