больше не могу правильно читать текстовый файл

0

Хорошо, так что в основном это моя программа, которая читает текстовый файл и помещает его внутри массива, в конце концов я распечатал все в этом массиве. Программа работает нормально и дает правильный результат несколько дней. Однако он просто прекратил работать сегодня. Например, текстовый файл

88
687
472
671

Но по завершении программы выход равен 0 1073741824 0 1073741824. Я не знаю, что происходит, и единственный раз, когда я внес некоторые изменения в bash, был ulimit -s неограничен. Есть идеи?

int main(int argc, char *argv[])
{
    ifstream file(argv[1]);
    int placeholder;
    int size = pow(2,atoi(argv[2]));
    int array[size];
    int index = 0;
    while (file >> placeholder)
    {
        array[index]=placeholder;
        index++;
    }

    for(int i = 0; i<size; i++)
    {
        cout<<array[i]<<endl;
    }
    return 0;
}
  • 2
    Возможно, файл не открывается успешно. Вы пытаетесь прочитать из потока, не проверив, что он действителен в первую очередь - возможно, он вообще ничего не читает, и вы печатаете содержимое неинициализированных данных.
  • 1
    Вы также не проверяете и не заботитесь, не переданы ли аргументы. Я имею в виду, каким будет значение size, если argc меньше 3. И я бы избегал VLA.
Показать ещё 2 комментария
Теги:
terminal
output

1 ответ

1
Лучший ответ

Вы уверены, что ваш текстовый файл доступен для чтения программой? Если входной файл не существует, программа все равно попытается напечатать argv[2]**2 записи из array которые не содержат никаких элементов! Программа заканчивается сбросом значений мусора.

Я также не уверен, почему вы делаете вызов pow - почему бы не получить количество элементов из argv[2]?

Кроме того, можно использовать некоторые функции (гр atoi), когда вы могли бы использовать C++ stringstream сделать преобразование.

Когда я запускаю ваш код с ./a.out file.txt 2: ./a.out file.txt 2, он печатает 4 числа, как ожидалось. Когда я делаю это вместо: ./a.out does_not_exist.txt 2, он печатает 4 значения мусора и выгружает их на экран.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню