【问题标题】:g++ and file read, weird behaviour with Xcode/Snow Leopardg++ 和文件读取,Xcode/Snow Leopard 的奇怪行为
【发布时间】:2017-01-11 00:54:26
【问题描述】:

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

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

有人遇到过这种错误吗?

【问题讨论】:

    标签: c++ xcode


    【解决方案1】:

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

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

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

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

    你应该使用

    getline(vfile, header);
    

    相反,headerstd::string

    【讨论】:

      【解决方案2】:

      这可能是_GLIBCXX_DEBUG 问题 - 确保您安装了最新的 Xcode,_GLIBCXX_DEBUG 为您的所有代码和库设置相同,您可能还想查看xcode-users 邮件列表。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多