我正在编写一个读取文件的程序,其前两行是:
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
。
有没有人遇到过这种错误?
答案 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}}邮件列表。