c++ - 为什么我的程序打印出空终止符?

标签 c++ encryption null termination

当我运行它时,它有时会打印出一个空终止符。大多数情况下它会打印字符,可能只有 1/5 次它会打印字符。

void cryptogram::Encrypt(){

  cout<<"encrypt"<<endl;

char  Alphabet[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

  fin.open("original.txt");

  cout<<"file opened";

  if(!fin)

    {
      cout<<"No file exists"<<endl;;
    }else{

  while(fin>>tempS){

        len=tempS.length();
        int a=0;
    for(int j=0;j<len;j++){
          for(a;a<=26;a++){
            tempS[j]=toupper(tempS[j]);
          if(tempS[j]!=Alphabet[a]){//while two characters arent equal
//if the characters arent equal...a is incremented, to see if the character from the word is equal to the next letter in the alphabet

                }else{
                   cout<<Crypto[a]; 
//crypto is an array of char filled with letters that are used to encrypt the message

           if(j!=len){ //if the word still has more characters
               j++;
               a=0;
           }else{  //if the word is done being scanned
 cout<<" ";

}
      }
    }
  }
}
  }
}

就是这样,这是有时打印的相应预期输出

xvk bkikhxlr wggbtfkj wiylekgbdhx wjjm hko wigbtubxt xvk iwhj uedjkm glctb gvrmdiwhj iebbdielmeggtbx ctb xvtmk gbtubxvk wjjdxdthgbtubodll khvxvk imkbfdik xt xvk bkudth whj gbtfdjk hko tgxdthm whj tggtbxehdxdkm ctb mxejkhxmibdzdhtltur whj pemxdik mxejdkm mxdh cok wbk wlmt gbkgctb cteb hko zdh cgvrmdikjeiwhj qdhkmdtlturzzkjdydtivkzdmxbrw zdh zdjjlkkjeiwhj w jtixtbdh kjeiwjzdhdmxbittgkbodxv mjme whj eimj

这是通常打印的内容

xvkÈ bkikhxlrÈ wggbtfkjÈ wiylekgbdhxÈ wjjmÈ hkoÈ wigbtubxtÈ xvkÈ iwhjÈ uedjkmÈ glctbÈ gvrmdiwhjÈ iebbdielmeggtbxÈ ctbÈ xvtmkÈ gbtubxvkÈ wjjdxdthgbtubodllÈ khvxvkÈ imkbfdikÈ xtÈ xvkÈ bkudthÈ whjÈ gbtfdjkÈ hkoÈ tgxdthmÈ whjÈ tggtbxehdxdkmÈ ctbÈ mxejkhxmibdzdhtlturÈ whjÈ pemxdikÈ mxejdkmÈ mxdhÈ cokÈ wbkÈ wlmtÈ gbkgctbÈ ctebÈ hkoÈ zdhÈ cgvrmdikjeiwhjÈ qdhkmdtlturzzkjdydtivkzdmxbrwÈ zdhÈ zdjjlkkjeiwhjÈ wÈ jtixtbdhÈ kjeiwjzdhdmxbittgkbodxvÈ mjmeÈ whjÈ eimj

或每个单词末尾的奇数字符的一些变体

密码数组顺便填的是这个

wyijkcuvdpqlzhtgabmxefonrs

这也是加密后的原始消息

最近批准的学术蓝图为校园增加了新的学术类(class),并指导规划这些类(class)的物理和类(class)支持。额外的项目将加强校园对该地区的服务,并为学生提供新的选择和机会。犯罪学和司法研究于 2003 年秋季开始。我们还在为 2004 年秋季的四个新专业做准备——体育和运动机能学、大众传媒、生物化学、中级教育硕士和教育管理博士(与 SDSU 和加州大学圣地亚哥分校)。

附言抱歉奇怪的格式,刚刚从终端复制粘贴,试图修复它

最佳答案

您正在从 0 到 26(含)迭代 a,但 Alphabet 仅包含 26 个元素,因此您有时会超出数组边界进行读取。这可能会导致 NULL 字符或存储在此内存位置的任何其他内容。您应该将 for 循环限制为 <=25 或 <26

关于c++ - 为什么我的程序打印出空终止符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5085261/

相关文章:

c++ - 获取 c 数组上 begin 的返回类型

c++ - 上限固定时的操作顺序

c++ - 函数模板特化生成链接错误

java - 什么条件导致对象实例化返回null?

c# - 如何判断对象引用是否为空?

c++ - 在 Char 数组中测试 nullptr (C++)

c++ - 为什么我不能用子类的指针访问基类的公共(public)函数?

ruby-on-rails - 如何对使用 attr_encrypted gem 加密的字段进行排序

PHP openssl_decrypt : Partial decryption works even with different IV?

firebase - Firebase Functions 上传入和传出 API 端点的数据是否已加密?