我正在读取一个文件并将数组的前面(指针)传回我的main函数。我遇到的问题是它没有复制单词之间的空格。例如,Hello Hello
标记为HelloHello
。
我开始使用getLine
代替并遇到了文件大小的问题。我将其设置为500,因为没有文件大于500,但大多数文件将低于500,我试图获得文件的确切大小。
这是我的代码:
char infile()
{
const int SIZE=500;
char input[SIZE];
char fromFile;
int i=0;
ifstream readFile;
readFile .open("text.txt");
while(readFile>>fromFile)
{
input[i]=fromFile;
i++;
}
cout<<endl;
returnArray=new char[i];//memory leak need to solve later
for(int j=0;j<i;j++)
{
returnArray[j]=input[j];
cout<<returnArray[j];
}
cout<<endl;
}
return returnArray[0];
}
答案 0 :(得分:5)
根据您的文件格式,您可能希望改为使用ifstream::read()
或ifstream::getline()
。
operator >>
将尝试在数据流被读取时“标记”或“解析”数据流,使用空格作为标记之间的分隔符。您有兴趣从原始数据中获取原始数据,因此您应该避免使用它。如果要一次读取一行数据,使用换行符作为分隔符,则应使用getline()
。否则使用read()
。
答案 1 :(得分:3)
使用std::string
,std::vector
和std::getline
,您仍然可以返回char
。这将解决您的内存泄漏和跳过空白问题。
示例:
char infile()
{
std::ifstream readFile("text.txt");
std::vector<std::string> v;
std::string line;
while(std::getline(readFile, line))
{
v.push_back(line);
}
for(auto& s : v)
{
std::cout << s << std::endl;
}
return (v[0])[0];
}
答案 2 :(得分:0)
在分隔有空格的地方时,你要求它阅读。
您可以使用getline()来保留空格。