为什么我的程序打印出空终止字符?

时间:2011-02-22 23:24:12

标签: 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<<" ";

}
      }
    }
  }
}
  }
}

这就是它,这是打印的对应的EXPECTED输出SOMETIMES

  

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ÈbtfdjkÈhkoÈ   tgxdthmÈwhjÈggtbxehdxdkmÈctbÈ   mxejkhxmibdzdhtlturÈwhjÈmmxdikÈ   mxejdkmÈmxdhÈcokÈwbkÈwlmtÈ   gbkgctbÈctebÈhkoÈzhhÈ   cgvrmdikjeiwhjÈ   qdhkmdtlturzzkjdydtivkzdmxbrwÈzhhÈ   zdjjlkkjeiwhjÈwÈjtixtbdhÈ   kjeiwjzdhdmxbittgkbodxvÈmjmeÈwhjÈ   eimj

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

这就是用

方式填充密码数组的方法
  

wyijkcuvdpqlzhtgabmxefonrs

这也是加密的原始邮件

最近批准的学术蓝图为校园增加了新的学术课程,并指导规划这些课程的实际和课程支持。其他计划将加强对该地区的校园服务,并为学生提供新的选择和机会。犯罪学和司法研究始于2003年秋季。我们还准备在2004年秋季开设四个新的专业 - 体育和运动学,大众媒体,生物化学,中学教育硕士和教育管理博士(与SDSU和UCSD)。

P.S。抱歉奇怪的格式化,只是从终端复制并粘贴,试图修复它

1 个答案:

答案 0 :(得分:7)

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