使用Xcode / Snow Leopard进行g ++和文件读取,奇怪的行为

时间:2010-01-19 08:58:54

标签: c++ xcode

我正在编写一个读取文件的程序,其前两行是:

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 ++编译程序;我得到了nTotfile_size正确的值,22698120,但是如果为Mac OS X Snow Leopard做了最后Xcode,我分别获得01634000000

有没有人遇到过这种错误?

2 个答案:

答案 0 :(得分:1)

电话vfile.getline(header, FILENAME)可能不正确。签名是:

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

其中s指向输出缓冲区,n是缓冲区的大小。

我怀疑你的FILENAME是一个整数...它可能是char const* g ++隐式转换为streamsize? (Eeuw ...如果可以,请使用-Wall -ansi。)这将具有依赖于编译器的值,如果它小于行的长度,则会使您的流进入错误状态(设置{ {1}})。然后,后续读取将失败,直到错误状态重置为止。

你应该使用

failbit
相反,getline(vfile, header); header

答案 1 :(得分:0)

这可能是_GLIBCXX_DEBUG问题 - 请确保安装了最新的Xcode,_GLIBCXX_DEBUG对所有代码和库设置相同,并且您可能还需要检查{{ 3}}邮件列表。