当我运行它时,它有时会打印出一个空终止字符。它大部分时间都是,也可能只打印字符的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。抱歉奇怪的格式化,只是从终端复制并粘贴,试图修复它
答案 0 :(得分:7)
您正在迭代0到26(包括),但Alphabet只包含26个元素,因此您有时会读取数组边界之外的内容。这可能导致NULL字符或存储在此内存位置的任何其他内容。您应该将for循环限制为&lt; = 25或&lt; 26