Почему моя программа выводит нулевой символ завершения? - PullRequest
0 голосов
/ 23 февраля 2011

Когда я запускаю это, НЕКОТОРЫЕ выводят нулевой символ завершения. В большинстве случаев это происходит, и, вероятно, в 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

Также это оригинальное сообщение, которое шифруется

Недавно утвержденный академический план добавляет новые академические программы в кампус и направляет планирование физической и учебной поддержки этих программ. Дополнительные программы улучшат обслуживание кампуса в регионе и предоставят новые возможности и возможности для студентов. Исследования в области криминологии и правосудия начинаются осенью 2003 года. Осенью 2004 года мы также готовимся к четырем новым специальностям - физическому воспитанию и кинезиологии, средствам массовой информации, биохимии, магистратуре среднего образования и докторантуре в области управления образованием (в сотрудничестве с SDSU и UCSD).

P.S. Извините за странное форматирование, просто скопировал и вставил из терминала, попытался это исправить

1 Ответ

7 голосов
/ 23 февраля 2011

Вы выполняете итерацию от 0 до 26 (включительно), но Alphabet содержит только 26 элементов, поэтому иногда вы читаете за пределами массива.Это может привести к появлению символа NULL или чего-либо еще, что хранится в этой ячейке памяти.Вы должны ограничить цикл for <= 25 или <26 </p>

...