这段代码出了什么问题?

时间:2012-04-18 19:01:07

标签: c++

当我写cout<< Read("filepath")时,我会得到一组奇怪的相同字符。代码如下:

char* Read(std::string FilePath)
{
    char* Buffer;

    ifstream F_S(FilePath);
    while (! F_S.eof())

    {

        F_S.getline(Buffer,100);
        return Buffer; 

    }
}

2 个答案:

答案 0 :(得分:3)

这里有多个问题:

首先,您的return语句位于while循环内,这意味着循环只执行一次,然后您才会从函数返回。 return语句需要放在while循环的 之外。

其次,您没有为Buffer分配任何存储空间。你要做的就是声明一个char*指针,它甚至没有被初始化。您需要显式分配存储,以便ifstream::getline具有存储输入的位置。您可以使用new来分配存储空间,但由于您的Read函数返回char*指针,因此调用函数需要手动管理内存,这通常很令人头痛。

更好的解决方案是使用免费功能std::getline,因为它需要std::string,因此您不必担心存储分配。您还需要更改Read的功能签名才能返回std::string

std::string Read(std::string FilePath)
{
    std::ifstream F_S(FilePath.c_str());
    /* You should also check for `F_S.good()` here */

    std::string result, Buffer; 
    while(std::getline(F_S, Buffer)) 
    {
        result += Buffer;
    }

    return result;
}

请注意,如果要在文件中保留回车符,则需要在每次迭代中手动将它们添加到result,因为std::getline会丢弃分隔符字符。

答案 1 :(得分:0)

你可以像这样定义你的读物。

#include <string>
#include <fstream>
#include <iostream>
using namespace std;

string& Read(string file_path)
{
    ifstream infile(file_path.c_str(), ios::in);
    string result = "";
    string line = ""; 
    while (getline(infile, line)) 
    {
        result.append(line); //also you can use result+=line, but append is faster than +=
    }

    return result;

}