当我写作时,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;
}
}
当我写作时,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;
}
}
这里有多个问题:
首先,你的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
会丢弃分隔符。
你可以像这样定义你的阅读。
#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;
}