c - 为什么我不能加密第二个字?

标签 c encryption scanf

我一直在尝试想出一个加密字符串的代码。我已经多次跟踪这段代码,但找不到错误。它只加密第一个单词,而在第二个单词时失败。

我做到了,感叹号是终止符。你能帮忙吗?

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/

相关文章:

c - 如何在 C 中解析链接的宏?

c - 删除 C 中的非字母字符

c# - SQL 对称 key 并从 C# 打开它

c - 使用 scanf 的字符串读取问题

c - 将文本文件读入 C 语言正确顺序

用于重新排序 XML 元素的 C API?

c - 如何实现删除节点的功能?

c# - 允许使用 AES 256 为 HMAC 解密任何数据

php - 在数据库中存储具有不同算法的哈希是否有意义?

c - 在数组中找到孤独的整数