我正在尝试将文件中的所有字符读入数组。假设声明了所有变量,为什么所有字符都没有被读入我的数组。当我输出“storeCharacters []”数组中的一些字符时,返回垃圾。请帮忙。
这是我的功能:
void countChars(ifstream& input, char storeCharacters[])
{
int i = 0;
while( !input.eof() )
{
input.get(storeCharacters[i]);
i++;
}
}
答案 0 :(得分:2)
在while循环之后尝试添加storeCharacters[i] = '\0'
以使null终止字符串。
答案 1 :(得分:0)
如果您知道文件的最大大小,则可以轻松解决问题,然后将数组设置为具有该大小并使用\0
进行初始化。
假设您文件中的最大字符数为10000
。
#define DEFAULT_SIZE 10000
char storeCharacters[DEFAULT_SIZE];
memset (storeCharacters,'\0',DEFAULT_SIZE) ;
以下帖子应该是使用缓冲区读取文件的正确方法,它具有内存分配以及您需要知道的所有内容:
答案 2 :(得分:0)
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <cstdlib>
using namespace std;
void getFileName(ifstream& input, ofstream& output) //gets filename
{
string fileName;
cout << "Enter the file name: ";
cin >> fileName;
input.open(fileName.c_str());
if( !input )
{
cout << "Incorrect File Path" << endl;
exit (0);
}
output.open("c:\\users\\jacob\\desktop\\thomannProj3Results.txt");
}
void countWords(ifstream& input) //counts words
{
bool notTrue = false;
string words;
int i = 0;
while( notTrue == false )
{
if( input >> words )
{
i++;
}
else if( !(input >> words) )
notTrue = true;
}
cout << "There are " << i << " words in the file." << endl;
}
void countChars(ifstream& input, char storeCharacters[], ofstream& output) // counts characters
{
int i = 0;
while( input.good() && !input.eof() )
{
input.get(storeCharacters[i]);
i++;
}
output << storeCharacters[0];
}
void sortChars() //sorts characters
{
}
void printCount() //prints characters
{
}
int main()
{
ifstream input;
ofstream output;
char storeCharacters[1000] = {0};
getFileName(input, output);
countWords(input);
countChars(input, storeCharacters, output);
return 0;
}