-1

当我写作时,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; 

    }
}
4

2 回答 2

3

这里有多个问题:

首先,你的return语句在你的while循环中,这意味着循环只会执行一次,然后你就会从函数中返回。该return语句需要放在循环之外while

其次,您不会为Buffer. 您所做的只是声明一个char*甚至没有初始化的指针。您需要显式分配存储空间,以便ifstream::getline在某个地方存储输入。你可以用它new来分配存储,但是由于你的Read函数返回一个char*指针,调用函数需要手动管理内存,这通常只是一个令人头疼的问题。

一个更好的解决方案是使用 free 函数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会丢弃分隔符。

于 2012-04-18T19:33:47.960 回答
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;

}
于 2012-04-19T08:21:30.903 回答