如何从文本文件中逐字逐句读取并将其放入字符数组中?

时间:2012-11-25 03:15:56

标签: c++

我试图从文本文件中逐个字符地读取字符直到EOF,将它们放入字符数组中,以便我可以在之后操作它。用g ++编译没有错误,并且在运行时,我被提示输入文件,但它只是挂起。

int main (int argc, char *argv[]) {
    string filename;
    ifstream infile;

    char *cp, c[1024];
    memset (c, 0, sizeof(c));
    cp = c;

    cout << "Enter file name: " << endl;
    cin >> filename;

    //open file
    infile.open( filename.c_str() );

    //if file can't open
    if(!infile) {
        cerr << "Error: file could not be opened" << endl;
        exit(1);
    }

    while (!infile.eof()); {
        infile.get(c, sizeof(infile));
       // get character from file and store in array c[]
    }
}//end main

3 个答案:

答案 0 :(得分:1)

您应该尝试使用istream::read()方法,而不是get()。这将有助于解决任何缓冲区溢出:

unsigned int chars_read = 0;
//...
// Read in the file.
if (!infile.read(c, sizeof(c))
{
    // Handle the read error here.
    // Also check for EOF here too.
}

// Obtain the number of characters actually read.
chars_read = infile.gcount();

答案 1 :(得分:0)

首先,您想要测试eof()!不知怎的,我开​​始觉得堂吉诃德找到了我的风车。但是,我知道您需要检查输入是否成功尝试读取之后,因为在尝试读取流之前无法知道它是否会成功。

你的程序实际上并没有挂起!它只是等待您输入sizeof(infile)个字符或结束输入(例如,在UNIX上使用Ctrl-D,在Windows上使用Ctrl-Z)。当然,这可能看起来像一个悬挂计划。您可以使用较小的尺寸(例如4)来验证这确实是问题所在。当然,sizeof(infile)几乎与一个小的随机数一样好:它是std::ifstream类型的对象的大小,谁可以告诉它是什么?您可能打算使用sizeof(c)来确保对get(c, n)的调用不会写入超出c的字符数。

答案 2 :(得分:0)

试试这个:

int cont = 0;
while(infile.good()) {
  c[cont++] = infile.get();
}