c++ - 无法找出 C++ 中 Caesar Cipher 的问题

标签 c++ encryption caesar-cipher

我很难弄清楚我的代码有什么问题。我的任务是将凯撒密码写入文件。它似乎显示了不应该出现的额外符号(有时),但它在其他方面运行良好。这是它的样子http://puu.sh/kC04F/2fc1bbd048.jpg 这是代码,提前致谢^^

#include<iostream>
#include<conio.h>
#include<cstring>
#include<stdio.h>
using namespace std;
int main ()
{
  char ch[20];
  char conv[20];
  int i;
  cout<<"Enter a word "<<endl;
  gets(ch); 
  int otm;
  cout<<"Enter shift "<<endl;
  cin>>otm;
  int c=strlen(ch);

  for(i=0; i<c; i++)
  {
    conv[i]=ch[i]+otm%26;
  }

  for(i=0; i<c; i++)
  {
      cout<<conv[i];
  }

  FILE *stream;
  char ime[]="probe.txt";

  stream=fopen(ime, "w");
  fwrite(conv, strlen(conv), 1, stream);
  fseek (stream, 0, SEEK_SET);

  cout<<endl;
  fflush(stream);
  fclose(stream);


  system ("pause");
  return 0;
}

最佳答案

问题是 char conv[20]; 包含垃圾。然后你用转换填充它,但你永远不会在末尾添加空终止符来指示字符串的结尾。 cout 处理垃圾的方式似乎与 fwrite 不同,因此输出到文件的内容与屏幕上的内容不同。要修复此更改:

for (i = 0; i<c; i++)
{
    conv[i] = ch[i] + otm % 26;
}

for (i = 0; i<c; i++)
{
    conv[i] = ch[i] + otm % 26;
}
conv[c] = '\0';

关于c++ - 无法找出 C++ 中 Caesar Cipher 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33000847/

相关文章:

c++ - 将指针传递给函数

asp.net-mvc - Asp.net Identity 使用什么算法来加密密码?

python caesar chr 和 ord 没有换行符,只是在字母表中迭代

java - 有错误的密码凯撒java程序

c# - 加密包含 unicode 的字符串会导致无法识别的字符

c++ - 使用与 makefile 链接的共享库

c# - 可以使用指针修改只读字段吗?但为什么?

c++ - 在用户定义类型的容器上使用 std::find c++

c++ - 需要帮助调试我的 C++ 编程(文本 ascii 操作)

Java用PBEWithMD5AndDES算法加密