从返回int的函数中获取char的正确方法?

时间:2012-07-24 19:07:34

标签: c++ c file

我正在使用文件系统库,我正在尝试创建一个readline函数。

int al_fgetc(ALLEGRO_FILE *f)
  

在5.0.0中引入

     

读取并返回给定文件中的下一个字节。在文件末尾或发生错误时返回EOF。

这是我在图书馆中使用的功能。我想要做的是+ =将结果字符写成std字符串,如果它是!= EOF,它是-1。我只是不确定是否需要投射才能获得正确的结果。像这样的事情会这样做:

bool File::readLine( std::string& buff )
{
    if(eof() || !isOpen())
    {
        return false;
    }
    buff = "";
    int c = 0;
    while(c = al_fgetc(m_file) != EOF && c != '\n')
    {
        buff += (char)c;
    }
    return buff.length() > 0;
}

我将从文件中读取utf-8,因此我需要确保其正常工作。

由于

3 个答案:

答案 0 :(得分:4)

是的,除非您需要一组额外的括号,否则这将有效,因为!=运算符的优先级高于=运算符:

while((c = al_fgetc(m_file)) != EOF && c != '\n')
    ...

fgetc返回int而不是char的唯一原因是有257个可能的返回值:所有256个可能的字节,或EOF,表示有文件中没有剩余数据。它将始终返回0-255或EOF,因此在您为char测试后,将返回值转换为unsigned charEOF是安全的。

答案 1 :(得分:1)

是的,他们返回int的唯一原因是因为char中没有可用于EOF信令的“free”值。因此,检查它不是EOF,然后将其重新投入char,这正是他们期望你做的。

答案 2 :(得分:1)

尝试使用feof(m_file)检查您是否已经到达文件末尾而不是检查fgetc返回的字符。这应该从eof检查中分离你的读取循环,因此不需要进行转换。