用c ++从文件中读取char

时间:2013-01-09 11:02:39

标签: c++

我创建了一个文件hangman_word_collection.txt,并将所有文件内容存储到字符串行中。

现在我想在我的程序中使用行字符串,但line[0]没有任何值,或者我不知道它是否有内容。

我是新手,请帮助。

以下是代码:

#include <iostream>
#include <fstream>

using namespace std;

int main() {
string line;

ifstream myfile ("hangman_word_collection.txt");
if (myfile.is_open()) {
    while (myfile.good()) {
        getline (myfile,line);
        cout << line << endl;
    }
}
for(int i=0; i <= 79; i++) {
    cout << "\n" << i;
    cout << ":" << line[i];
}
return 0;
}

输出:

actingraringbackupcampusdacoiteasilyfabricgardenhackediceboxprimeralwaysupload.


0:
1:c
2:t
3:i
4:n
5:g
6:r
7:a
8:r
9:i
10:n
11:g
12:b
13:a
14:c
15:k
Press <RETURN> to close this window...

1 个答案:

答案 0 :(得分:5)

getline写入目标line失败时,您假设它不会修改该字符串中的内容,但它会消隐字符串,该字符串在内部用空字符替换字符0。

其余的是未定义的行为,因为您正在读取逻辑字符串末尾的字符。

要解决此问题,请将代码更改为;

string line;

ifstream myfile ("hangman_word_collection.txt");
if (myfile.is_open())
{
    while (myfile.good())
    {
       std::string temp;
       if( getline( myfile, temp ) )
       {
           temp.swap( line );
           cout <<line<<endl;
       }
    }
}

请注意,在像79这样的幻数中进行硬编码是不好的做法。如果你放了line.size()而不是你会看到字符串的实际大小,并且没有未定义的行为。如果您担心性能,可以将它存储在循环外的变量中,尽管它可能没什么区别。