当我写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;
}
}
答案 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;
}