c++ ifstream to char *

c++ ifstream to char *

本文关键字:char to ifstream c++      更新时间:2023-10-16

我的代码使用 ifstream 读取文件并解析它,现在我更改了一些东西,我不需要读取文件,'因为是从另一个地方读取的,所以我有一个字符*代替 ifstream...如何在使用 ifstream.get() 的地方更改我的代码?再次感谢

你只是把你的char *放进一个std::stringstream

std::stringstream buffer(your_string);

然后,您可以像使用std::ifstream一样使用buffer(您无法打开或关闭它)。理想情况下,您的parse方法将对std::istream的引用作为参数,然后它不会介意它接收哪种输入流:

void parse(std::istream & input);

由于std::ifstreamstd::stringstream都继承自std::istream,因此您可以将它们作为参数传递,并且您的解析器无需修改即可运行。

#include <sstream>
#include <fstream>
#include <iostream>
using namespace std;
void mung( istream & is ) {
    char c;
    while( is >> c ) {
        cout << c << endl;
    }
}
int main( int argc, char *argv[] ) {
    if ( argc > 1 ) {
        ifstream ifs( argv[1] );
        mung( ifs );
    }
    else {
        istringstream iss( "here is some text to mung" );
        mung( iss );
    }
}

正如其他人所说,您可以使用 std::istringstream ,但在这种情况下,我更喜欢已弃用(但始终存在)的std::istrstream. 或只需创建一个简单的memory_streambuf,带有imemorystreamomemorystream:如果你不需要双向,也不需要支持寻求,memory_streambuf少于 10 行代码,始终有用,并且省略了其他解决方案的很多复杂性。(当然,如果您只执行此操作一次,请使用现有解决方案是首选。 但我发现memory_streambuf在许多案例。