file.get(char c)和file.get(char * c,int length)之间的差异

时间:2018-04-13 10:51:13

标签: c++ file ifstream

我正在为我的代码编写一个函数 该函数只需要一个打开的文件来处理。

这里是函数的代码:

void printFile(std::ifstream &file)
{
    file.seekg(0, file.end);
    int length = file.tellg();
    file.seekg(0, file.beg);

    char *buffer = new char[length];
    file.get(buffer, length);
    file.seekg(0, file.beg);
    char c;
    int i = 0;
    std::cout << "Uncreypted file" << std::endl;
    while (file.get(c))
    {   
        // loop getting single characters

        std::cout << c << " " << buffer[i] << " ";
        i++;
    }
    std::cout << std::endl;

    delete[] buffer;
}

结果很奇怪:

  

未加密的文件,这是我自己的问题   t = t = h = i = s = = i = s = = a = = l = i = g = n =

在一行之后,缓冲区输出的内容与file.get.(c)工作原因不同,原因是什么? 这是因为the carriage return ascii letter

1 个答案:

答案 0 :(得分:3)

  

在一行之后缓冲区输出不同的

那是因为您没有阅读您使用过的功能的文档。

[uc,vc]默认停在第一个换行符ref)。

因此,您的file.get(buffer, length)仅包含文件的第一行 您的其他buffer次访问正在废话。

了解how best to read a whole file into a string in C++

并且不要编程“盲目”,然后当你的程序没有做你想做的事时会感到惊讶;
阅读文档