Использование строки типа String^

Рейтинг: 0Ответов: 1Опубликовано: 01.04.2015

У меня стоит задача зашифровать текст. Я считываю исходный текст из файла и текст шифра из файла. Считываю текст я в переменную типа Sting^, мне нужно сравнить символ из первой строки с каждым символом из стоки шифра.У меня не получается ходить по строке типа String^ с шифром, я пишу cipher[0], cipher[1] и тд. но компилятор выдает мне сообщение об ошибке, как решить эту проблему? Вот код:

private: System::Void button4_Click(System::Object^  sender, System::EventArgs^  e) {
    StreamReader^ fileCipher = gcnew StreamReader("cipher.txt");
    String^ cipher;
    int count = 0;
    while(fileCipher->ReadLine()){
        cipher = fileCipher->ReadLine();
    }
    String^ temp = gcnew String("nbc");
    if(cipher[0] == temp[0])
        MessageBox::Show("Yes!!!");
}

При компиляции при нажатии на кнопку вылетает ошибка:

Необработанное исключение типа "System.NullReferenceException" в WindowsFormsApplication1.exe

Ответы

▲ 1Принят

Код не запускал, но простой построчный просмотр кода показывает, что из всех перечисленных в этом фрагменте переменных значение null может иметь только cipher (входящие параметры подразумеваем корректными). Она не инициализируется при создании, присваивается только внутри тела while, который может и не выполниться ни разу.

Нужны как минимум два исправления: 1. изначально инициализировать строку cipher пустой строкой, 2. после чтения проверить, что она не пустая (а то вместо null reference получите out of range)