我一直在尝试想出一个加密字符串的代码。我已经多次跟踪这段代码,但找不到错误。它只加密第一个单词,而在第二个单词时失败。
我做到了,感叹号是终止符。你能帮忙吗?
char word[50];
int i;
char str[50];
char c;
printf("enter word to decrypt: ");
scanf("%s", word);
for( i = 0; i < 50; i++) {
c = word[i];
if (c == ' ') {
str[i] = c;
continue;
}
if (c == '!') {
str[i] = '\0';
break;
}
str[i] = word[i] + 1;
}
printf("Encrypted string is '%s'\n", str);
最佳答案
您的意思是您将两个(或更多)单词作为单个 scanf
的输入吗?称呼?那是行不通的。
scanf
"%s"
格式仅读取单个空格分隔 单词。它无法使用 "%s"
格式读取多个以空格分隔的单词。
要么使用循环读取多个单词,要么使用 fgets
读取整行,或使用不在空格处停止的格式(例如 "%["
)。
您展示的代码还存在其他问题。如果您输入一个超过 49 个字符的单词,它可能会溢出缓冲区。并且循环不关心单词的实际长度,而是进入数组 word
的未初始化内存。这两者都会导致未定义的行为。
关于c - 为什么我不能加密第二个字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37884229/