Re: how to pass vector<char> as parameter?
I've never bothered with the C++ I/O classes, but basically, your
problem is most likely the same one you have in your commented
code using CRT file I/O - you are reading the file in text mode.
For the commented code to work you need to replace "rt" in
fopen with "rb". Someone else should easily point out the syntax
for using binary I/O with the C++ stream classes...
--
=====================================
Alexander Nickolov
Microsoft MVP [VC], MCSD
email: agnickolov@mvps.org
MVP VC FAQ: http://vcfaq.mvps.org
=====================================
"Jack" <jl@knight.com> wrote in message
news:efUI02O2HHA.4680@TK2MSFTNGP03.phx.gbl...
I am working on a file parser.
void process_file(std::string filename)
{
//FILE *afile;
char c;
ifstream infile(filename.c_str ());
//if ((afile = fopen (filename, "rt")) == NULL)
//{
// exit(0);
//}
if(!infile)
{
cerr<<"Can't open file " << filename << endl;
exit(-1);
}
//fileData = (char *) malloc (50000);
// memset (fileData, 0, sizeof(fileData));
// fread (fileData, sizeof(char), sizeof(fileData), afile);
while (infile >> c)
{
fileData.push_back(c);
}
printf ("Parsing %s\n", filename.c_str());
parse (fileData, fileData.size());
}
void parse (vector<char> buf, long count)
{
int i,j;
char *tokens[256];
long cnt = 0; // count for number of tokens
char c;
bool ignore = false;
int k = 0;
char buff[256];
PCSTR buf2 = &buf[0];
// char p;
std::string buf3;
// static long token_count = 0;
for (;;) {
memset (buff, 0, 256);
trim (buf2);
is_comment(buf2[0], buf2[1]);
if (one_line_comment)
{
while (*buf2 != '\n') <<<<<<<<<<<< when I took a view at buf2, all \n
disappeared
buf2++;
buf2++; // Skip tail \n