c - 如何在C中将字符组合在一起作为字符串

标签 c encryption character

这是我的代码。我正在尝试编写一个文本文件所有字符(=p)。但它只写了一个字符。

FILE *enc_vigenere = fopen(".../enc_vig.txt", "w");

unsigned int i, j, p = 0;         

for(i=0,j=0;i<strlen(text);i++, j++){
    if(j>=strlen(key)) {
        j = 0;
    }
    if(text[i] >= 'a' && text[i] <= 'z' ) {  

        p = 97+(((toupper(text[i])-65)+(toupper(key[j])-65))%26);

    }

    else if(text[i] >= 'A' && text[i] <= 'Z') {

        p = 65+(((toupper(text[i])-65)+(toupper(key[j])-97))%26);
    }

    printf("%c", p);
    fprintf(enc_vigenere, "%c", p);
    fclose(enc_vigenere);
 }

}

输出在这里:

Text you want to Encrypt : bahar
math
naahd

结果是正确的“naahd”,但是当我打开文本文件时,我只看到一个字符。 “n”我找不到如何修复它。谢谢。

最佳答案

  1. fclose(enc_vigenere); 需要位于 for 循环之外。

  2. 这不是可移植的 C。您不能假设 az 出现在一个 block 中。 (AZ 同上。)您也不能假设 65 是 A 的值。

对于 (2),请使用 int islower(int c)int isupper(int c) 代替。这些功能是可移植的。

关于c - 如何在C中将字符组合在一起作为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40787839/

相关文章:

从不同大小的整数转换为指针(将 int 作为 const void * 参数传递)

c - 警告 : comparison between pointer and integer, 赋值从指针生成整数而不进行强制转换?

c - 将 char 数组初始化为 NULL 奇怪的行为

c# - C#中的凯撒密码

android - 使用带有字体的特定字符时,文本会被截断

java - HttpURLConnection 输出流汉字

c - Win32 匿名管道在首次读取后损坏

java - ActionScript3 和 Java 加密/解密

python - 如何在 Python 3.3 中加密/解密字典?

xml - XML 标签中可以使用非拉丁字符吗?