在 g++ 和 msvc 中使用 ifstream 读取文件的差异
Differences in reading file using ifstream in g++ and msvc
当使用 ifstream 类从输入文件中读取单词时,我使用了以下表达式:
#include <iostream>
#include <fstream>
int main(int argc, char *argv[])
{
std::ifstream inputStream(myFile.txt);
std::string myString;
myFile.open()
while(myFile.good())
{
myFile >> myString;
printf("%s n", myString);
}
return 0;
}
myFile.txt的内容是:"这是一个简单的程序。
使用 g++ 编译器按预期编译和执行。
但是,使用 msvc 2008 编译时,相同的代码会在提取运算符 (>>) 处返回错误,要求我将 std::string 替换为初始化的字符数组或任何受支持的本机类型。
这让我很失望,因为我期望标准库的用法在实现中是相同的。
我了解编译错误,并知道通过使用c_str()修复它的方法。
但是,如果有人能澄清为什么标准库的用法在不同平台上是不同的,这将对我有很大帮助。
对我来说,它不再是斯塔达德了!
编辑:代码更新为完整。我的文件内容.txt更新。
很可能
你忘了#include <string>
.没有它,Microsoft版本的<iostream>
(等等)包含了足够的std::string
声明,让某些事情正常工作,但其他部分缺失,所以你会得到奇怪的、看似莫名其妙的失败。
缺少的一件事是大多数运算符重载std::string
,这正是您似乎缺少的。
顺便说一句,while (myfile.good()) ...
几乎是一个有保证的错误 - 你可能想要:
while (myfile>>myString)
std::cout << myString << " n";
或者,您可以使用标准算法来完成这项工作:
#include <string>
#include <algorithm>
#include <iterator>
#include <fstream>
#include <iostream>
int main() {
std::ifstream myfile("input.txt");
std::copy(std::istream_iterator<std::string>(myfile),
std::istream_iterator<std::string>(),
std::ostream_iterator<std::string>(std::cout, " n"));
return 0;
}
以下内容在
MSVC 2010 上对我来说编译得很好:
std::ifstream inputStream;std::string myString;inputStream.open("myFile.txt", std::ifstream::in);while(inputStream.good()){ inputStream>> myString;}
注意:不使用std::ifstream::in
作为我的打开模式,我遇到了与您相同的错误。我建议您检查此参数的值。
相关文章:
- 正在将csv文件读取为双精度矢量
- 将从格式化文本文件读取的文本数据存储到链表
- C++ 读取文件读取文件不正确
- 使用对象文件读取三角形数据网格
- 如何减慢从 BVH 文件读取的 opengl 动画?
- 从文件读取,并写入函数C++中的数组
- 从对象C++中的文件读取内容时出现分段错误
- 从文件读取并通过矢量输出到控制台
- 尝试将字符串从文件读取到无符号字符向量中
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 简化文件读取的函数
- 如何将逗号分隔的文件读取为 2D int 数组?
- 在 c++ 中将数据从文件读取到队列中
- 'std::wstring_convert'尽可能多地转换(从 UTF8 文件读取块)
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 文件读取C++包括空格键
- 从文件读取时未将值推回矢量
- 从文件 C++ 读取时的无限循环
- 从同一文件读取和写入?
- 从.txt文件读取到C++中的双精度向量