2015-03-09 2 views
0

У меня такая странная ситуация - я пытаюсь читать слова из файла.ifstream crashing program if file содержит длинные слова (не экстремальные)

#include <iostream> 
#include <string> 
#include <fstream> 
#include <stdio.h> 

int main(int argc, const char* argv[]) { 

    if (argc != 2) { 
     std::cout << "bad number of arguments" << std::endl; 
     return 1; 
    } 

    std::cout << "trying to open file: " << argv[1] << std::endl; 

    ifstream fin(argv[1]); 
    std::cout<< "this is a test string" << std::endl; 

    if (!fin) { 
     std::cout << "Could not open file" << std::endl; 
     return 1; 
    } 

    string word; 
    while (fin >> word) { 
     std::cout << word << std::endl; 
    } 

    return 0; 
} 

грохот вход: (слова не делают логический смысл, просто кучу слов)

the man row in front turned when he heard his name 
called but had no idea who called him 
and was worried maybe police were looking for 
so ran hid car 
lock master frame card muffin 
pancake their pasta shuttle glass 
remote where answer chair table 
laptop phone key window paper abcdefghijkmop 

имя файла передается в качестве параметра (очевидно) и файл существует точно в правильное местоположение.

В моем файле имеется 50 слов. попытка открыть файл заставляет его сбой, он даже не может распечатать тестовую строку, которую я положил.

странная вещь - когда я удаляю некоторые слова (оставьте только 36 слов), это работает. когда я добавляю еще одно слово - он падает.

Я попытался проверить форматирование, пробелы и символы новой строки, использовал несколько текстовых редакторов - ничего не работает. как вы можете видеть, это первый в своем роде, поэтому я думаю, что ничего не может вызвать эту проблему.

Я попытался проверить другие темы like this или this, но не смог найти решение.

, пожалуйста, помогите мне решить эту проблему - сводит меня с ума, что добавление слова из 36-ти слов в файле приводит к сбою программы, но с таким количеством слов или меньше - работает так, как ожидалось. Я ощущаю свою ошибку в форматировании, которую я пропускаю, но я просто не знаю, что.

im используя окна 7, визуальная студия 2013, если это поможет.

UPDATE: я попробовал другой пример с более длинными словами, и я заметил, что, когда я удаляю более длинные слова, он работает, поэтому, возможно, проблема была связана с длиной слова. однако я использовал «строковое слово». возможно, это может быть проблемой? (На больше я имею в виду, как «население», а не что-то экстремальное)

+0

[Нам нужен ** полный ** пример] (http://stackoverflow.com/help/mcve): полная программа и ввод, который вызывает плохое поведение. – Cornstalks

+0

обновит сообщение в один момент – Zephyer

+0

Технически ваш главный нестандарт, так как вторым параметром должен быть 'char * argv []' –

ответ

0

Поскольку вы используете C++, вы должны придерживаться стандартной библиотеки C++/O заголовки I:

#include <iostream> 
#include <fstream> 

Заголовок старого стиля С

#include <stdio.h> 

++ заголовок совместимости C для "stdio.h" является

#include <cstdio> 

по какой-то причине Я не понимаю, смешивая <iostream> и <stdio.h> вызывает проблемы при Visual Studio 2013.

Я рад, что удаление <stdio.h> фиксированного вашей проблемы, даже если это было только догадкой, и я не могу просветить вас больше с первопричиной.

+0

большое спасибо! – Zephyer