g ++ и чтение файлов, странное поведение с Xcode / Snow Leopard - PullRequest
0 голосов
/ 19 января 2010

Я пишу программу, которая читает файл, первые две строки которого:

Field of space: 0.4
226981 20

Тогда я хочу передать 226981 и 20 целочисленным переменным. Итак, я делаю:

 ifstream vfile(file_name, ios::in);      
 vfile.getline(header,FILENAME);  // Read the header-line      
 vfile >> nTot >> file_size;

Если я скомпилирую программу с g ++; Я получаю nTot и file_size правильные значения, 226981 и 20, но если сделать это для Mac OS X Snow Leopard с последним Xcode, я получу 0 и 1634000000 соответственно.

Кто-нибудь сталкивался с такой ошибкой?

Ответы [ 2 ]

1 голос
/ 19 января 2010

Звонок vfile.getline(header, FILENAME), вероятно, неверен.Подпись:

istream::getline(char *s, streamsize n)

, где s указывает на выходной буфер, а n - размер буфера.

Я сомневаюсь, что ваш FILENAME является целым числом... это, вероятно, char const*, что g ++ неявно приводит к streamsize?(Eeuw ... используйте -Wall -ansi, если можете.) Это будет иметь значение, зависящее от компилятора, и если оно меньше длины строки, это приведет к тому, что ваш поток перейдет в состояние ошибки (установите failbit).Последующие чтения не будут выполняться до тех пор, пока состояние ошибки не будет сброшено.

Вместо этого следует использовать

getline(vfile, header);

, где header - это std::string.

0 голосов
/ 19 января 2010

Это может быть проблема _GLIBCXX_DEBUG - убедитесь, что у вас установлен последний Xcode, что _GLIBCXX_DEBUG установлен одинаково для всего вашего кода и библиотек, и вы также можете проверить xcode-users список рассылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...