Solved

problems opening a binary file to screen for viewing.

Posted on 2004-09-06
23
226 Views
Last Modified: 2010-04-01
Hi,

I have a code that requires a birnary file to be opened for output to the screen but when I execute the code it says "File can not be opened"
here is my code
int readBinaryRecord(BirdRecord all[],string option,BirdLocationAllWrite BirdOrLocationOrAll)
{
      ifstream inFile;

      inFile.open(inFileName,ios::binary);

      if(inFile.fail() )
      {
            cerr<<"FILE "<<inFileName<<" Could not be Opened ";

            getch();

            exit(1);
      }

      int idx=0;

      BirdRecord birds;

      while(! ( inFile.eof() ) )
      {
            inFile.read(reinterpret_cast<char*>(&birds),sizeof(birds) );  //Read a binary record.

            if(BirdOrLocationOrAll== BIRD )//for option 3, that is view sightings on the basis of a particular type of birds.
            {
                  if(birds.type==option)
                  {
                        all[idx].firstDate=birds.firstDate;
                        all[idx].firstMonth=birds.firstMonth;
                        all[idx].firstYear=birds.firstYear;

                        all[idx].latestDate=birds.latestDate;
                        all[idx].latestMonth=birds.latestMonth;
                        all[idx].latestYear=birds.latestYear;

                        strcpy(all[idx].type,birds.type);
                        strcpy(all[idx].location,birds.location);

                        all[idx].numberOfBirds=birds.numberOfBirds;


                        idx++;
                  }
            }

            if(BirdOrLocationOrAll==LOCATION)//for option 4, that is view sightings on the basis of a particular type of location.
            {
                  if(birds.location==option)
                  {
                        all[idx].firstDate=birds.firstDate;
                        all[idx].firstMonth=birds.firstMonth;
                        all[idx].firstYear=birds.firstYear;

                        all[idx].latestDate=birds.latestDate;
                        all[idx].latestMonth=birds.latestMonth;
                        all[idx].latestYear=birds.latestYear;

                        strcpy(all[idx].type,birds.type);
                        strcpy(all[idx].location,birds.location);

                        all[idx].numberOfBirds=birds.numberOfBirds;


                        idx++;
                  }
            }
            if(BirdOrLocationOrAll==ALL)//for option 5, view all birds in all location.
            {
                  all[idx].firstDate=birds.firstDate;
                  all[idx].firstMonth=birds.firstMonth;
                  all[idx].firstYear=birds.firstYear;

                  all[idx].latestDate=birds.latestDate;
                  all[idx].latestMonth=birds.latestMonth;
                  all[idx].latestYear=birds.latestYear;

                  strcpy(all[idx].type,birds.type);
                  strcpy(all[idx].location,birds.location);

                  all[idx].numberOfBirds=birds.numberOfBirds;
                  idx++;
            }
      }
      return idx;
      }
there is a header file with
const char inFileName[] = "birds.bin";//name of file
thanks

Kaz
0
Comment
Question by:KazIT
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 11
  • 7
  • 4
  • +1
23 Comments
 

Author Comment

by:KazIT
ID: 11988746
also I don't want the binary file records already existing to be deleted as I have to update various records in it with  a different function.
0
 
LVL 5

Expert Comment

by:lemmeC
ID: 11988758
This might be a trivial question. Is the header file included in the codefile?
0
 
LVL 5

Expert Comment

by:lemmeC
ID: 11988772
Also, do you have permissions to open the file?
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:KazIT
ID: 11988809
lemmeC...yes that header file is included.
How do I know if i have permissions to open the file? I can click on it in the project and it opens ok...but other than that I'm not sure what you mean sorry.
0
 
LVL 5

Expert Comment

by:lemmeC
ID: 11988925
Try replacing:
inFile.open(inFileName,ios::binary);

with
inFile.open(inFileName,ios::binary|ios::in);

0
 
LVL 5

Expert Comment

by:lemmeC
ID: 11988933
>> I can click on it in the project and it opens ok <<
Then the permissions are fine.
0
 

Author Comment

by:KazIT
ID: 11988968
thanks lemmeC.

The file seems to open but I must have a problem in my function because it says the number of birds or locations are zero....and I know there are those particular records there in the binary file
0
 
LVL 17

Expert Comment

by:rstaveley
ID: 11989221
(1) What is the length of your file?
(2) How many BirdRecords do you expect there to be in that file?
(3) Show us your BirdRecord class/struct definition.
(4) At the beginning of your program printf or cout sizeof(BirdRecord) and see if it differs from your expectation.

My guess is that struct/class BirdRecord is not packed and that you are therefore reading the wrong number of bytes each time and that the bytes read are being read into the wrong offsets in your struct.

On a lot of compilers you can byte-pack the struct by using the #pragma pack(1) directive as follows:
--------8<--------
#pragma pack(1)
struct BirdRecord
{
  // ...
};
#pragma pack()
--------8<--------

Beware that this is not portable, but it works with GCC and VC.
0
 

Author Comment

by:KazIT
ID: 11993748
This is a copy of the binary file.  As you can see there are many records in this file.

ÍÔpelicansÌÌÌÌÌÌÌÌÌÌÌAwonga DamÌÌÌÌÌÌÌÌÌÎ Òwood ducksÌÌÌÌÌÌÌÌÌAwonga DamÌÌÌÌÌÌÌÌÌ6ÔÔblack ducksÌÌÌÌÌÌÌÌAwonga DamÌÌÌÌÌÌÌÌÌ<ÎÓwhistling ducksÌÌÌÌAwonga DamÌÌÌÌÌÌÌÌÌb Ì Ñmagpie geeseksÌÌÌÌAwonga DamÌÌÌÌÌÌÌÌÌd
ÎÒking fishersksÌÌÌÌAwonga DamÌÌÌÌÌÌÌÌÌÌ
Ówater fowlsksÌÌÌÌAwonga DamÌÌÌÌÌÌÌÌÌ`ÏÐdab chickssksÌÌÌÌAwonga DamÌÌÌÌÌÌÌÌÌ Ï
Òspoon billsksÌÌÌÌAwonga DamÌÌÌÌÌÌÌÌÌ#      Ï      ÒcormorantsksÌÌÌÌAwonga DamÌÌÌÌÌÌÌÌÌM
      ÏÓpelicanssksÌÌÌÌFairburn DamÌÌÌÌÌÌÌ2 ÌÔwood ducksksÌÌÌÌFairburn DamÌÌÌÌÌÌÌ] ÌÔblack ducksksÌÌÌÌFairburn DamÌÌÌÌÌÌÌø
ÌÑwhistling ducksÌÌÌÌFairburn DamÌÌÌÌÌÌÌÏ      Òmagpie geeseksÌÌÌÌFairburn DamÌÌÌÌÌÌÌ/king fishersksÌÌÌÌFairburn DamÌÌÌÌÌÌÌÎÑwater fowlsksÌÌÌÌFairburn DamÌÌÌÌÌÌÌB ÌÓdab chickssksÌÌÌÌFairburn DamÌÌÌÌÌÌÌZÏ            Ðspoon billsksÌÌÌÌFairburn DamÌÌÌÌÌÌÌ? ÏÐcormorantsksÌÌÌÌFairburn DamÌÌÌÌÌÌÌ>Í
ÐpelicanssksÌÌÌÌTinaroo DamÌÌÌÌÌÌÌÎÔwood ducksksÌÌÌÌTinaroo DamÌÌÌÌÌÌÌ[ÎÑblack ducksksÌÌÌÌTinaroo DamÌÌÌÌÌÌÌÎÓwhistling ducksÌÌÌÌTinaroo DamÌÌÌÌÌÌÌ0ÌÓmagpie geeseksÌÌÌÌTinaroo DamÌÌÌÌÌÌÌÎÔking fishersksÌÌÌÌTinaroo DamÌÌÌÌÌÌÌDÏ Ñwater fowlsksÌÌÌÌTinaroo DamÌÌÌÌÌÌÌÌÔdab chickssksÌÌÌÌTinaroo DamÌÌÌÌÌÌÌÙÍÔspoon billsksÌÌÌÌTinaroo DamÌÌÌÌÌÌ̉ÎÐcormorantsksÌÌÌÌTinaroo DamÌÌÌÌÌÌÌÍÓpelicanssksÌÌÌÌIvanhoe DamÌÌÌÌÌÌÌÎÑwood ducksksÌÌÌÌIvanhoe DamÌÌÌÌÌÌÌ  Ï Óblack ducksksÌÌÌÌIvanhoe DamÌÌÌÌÌÌÌ
!      Ì Ówhistling ducksÌÌÌÌIvanhoe DamÌÌÌÌÌÌÌ9"Ï Ómagpie geeseksÌÌÌÌIvanhoe DamÌÌÌÌÌÌÌ_#
Ï      Óking fishersksÌÌÌÌIvanhoe DamÌÌÌÌÌÌÌ`$ ÌÒwater fowlsksÌÌÌÌIvanhoe DamÌÌÌÌÌÌÌ% ÎÓdab chickssksÌÌÌÌIvanhoe DamÌÌÌÌÌÌÌL&ÏÓspoon billsksÌÌÌÌIvanhoe DamÌÌÌÌÌÌÌ['
ÌÔcormorantsksÌÌÌÌIvanhoe DamÌÌÌÌÌÌÌ=(Í ÑpelicanssksÌÌÌÌLake VictoriaÌÌÌÌÌÌ )Ï      Òwood ducksksÌÌÌÌLake VictoriaÌÌÌÌÌÌ*Î      Òblack ducksksÌÌÌÌLake VictoriaÌÌÌÌÌÌ>+ÍÑwhistling ducksÌÌÌÌLake VictoriaÌÌÌÌÌÌ ,
Î Ñmagpie geeseksÌÌÌÌLake VictoriaÌÌÌÌÌÌ-Ï Òking fishersksÌÌÌÌLake VictoriaÌÌÌÌÌÌ.
Ï Ðwater fowlsksÌÌÌÌLake VictoriaÌÌÌÌÌÌ</ÏÒdab chickssksÌÌÌÌLake VictoriaÌÌÌÌÌÌ0 Í      Òspoon billsksÌÌÌÌLake VictoriaÌÌÌÌÌÌ+1
Î      
ÐcormorantsksÌÌÌÌLake VictoriaÌÌÌÌÌÌ      2ÌÑpelicanssksÌÌÌÌBurnett RiverÌÌÌÌÌÌ3      ÌÓwood ducksksÌÌÌÌBurnett RiverÌÌÌÌÌÌA4Ï Ðblack ducksksÌÌÌÌBurnett RiverÌÌÌÌÌÌ_5ÌÐwhistling ducksÌÌÌÌBurnett RiverÌÌÌÌÌÌY6 ÍÑmagpie geeseksÌÌÌÌBurnett RiverÌÌÌÌÌÌ7Ï      Ðking fishersksÌÌÌÌBurnett RiverÌÌÌÌÌÌ8       ÍÔwater fowlsksÌÌÌÌBurnett RiverÌÌÌÌÌÌD9ÍÔdab chickssksÌÌÌÌBurnett RiverÌÌÌÌÌÌ:ÏÔspoon billsksÌÌÌÌBurnett RiverÌÌÌÌÌ̲; Ì
ÓcormorantsksÌÌÌÌBurnett RiverÌÌÌÌÌÌP<       Í ÒpelicanssksÌÌÌÌBurdekin RiverÌÌÌÌÌ.=Ï
Òwood ducksksÌÌÌÌBurdekin RiverÌÌÌÌÌK>Ï       Óblack ducksksÌÌÌÌBurdekin RiverÌÌÌÌÌ>?ÍÒwhistling ducksÌÌÌÌBurdekin RiverÌÌÌÌÌ>@      ÌÔmagpie geeseksÌÌÌÌBurdekin RiverÌÌÌÌÌ      A
ÌÒking fishersksÌÌÌÌBurdekin RiverÌÌÌÌÌbBÍÑwater fowlsksÌÌÌÌBurdekin RiverÌÌÌÌÌ5C ÎÐdab chickssksÌÌÌÌBurdekin RiverÌÌÌÌÌD       Î
Óspoon billsksÌÌÌÌBurdekin RiverÌÌÌÌÌWE ÍÑcormorantsksÌÌÌÌBurdekin RiverÌÌÌÌÌPF

Ï
ÐpelicanssksÌÌÌÌPioneer RiverÌÌÌÌÌ9GÎÔwood ducksksÌÌÌÌPioneer RiverÌÌÌÌÌCHÌÓblack ducksksÌÌÌÌPioneer RiverÌÌÌÌÌ[I      Î
Òwhistling ducksÌÌÌÌPioneer RiverÌÌÌÌÌWJÎÔmagpie geeseksÌÌÌÌPioneer RiverÌÌÌÌÌØKÏÓking fishersksÌÌÌÌPioneer RiverÌÌÌÌÌbL      ÍÓwater fowlsksÌÌÌÌPioneer RiverÌÌÌÌÌSM ÌÒdab chickssksÌÌÌÌPioneer RiverÌÌÌÌÌ NÎÔspoon billsksÌÌÌÌPioneer RiverÌÌÌÌÌaOÏÔcormorantsksÌÌÌÌPioneer RiverÌÌÌÌ̪PÌÓpelicanssksÌÌÌÌMary RivererÌÌÌÌÌQÍÒwood ducksksÌÌÌÌMary RivererÌÌÌÌÌRR
Í Òblack ducksksÌÌÌÌMary RivererÌÌÌÌÌUSÏÐwhistling ducksÌÌÌÌMary RivererÌÌÌÌÌ(TÏÓmagpie geeseksÌÌÌÌMary RivererÌÌÌÌÌ=UÏÓking fishersksÌÌÌÌMary RivererÌÌÌÌÌVÍ Ðwater fowlsksÌÌÌÌMary RivererÌÌÌÌÌ W      ÌÑdab chickssksÌÌÌÌMary RivererÌÌÌÌÌ_X
ÌÓspoon billsksÌÌÌÌMary RivererÌÌÌÌÌ"Y Ï
ÓcormorantsksÌÌÌÌMary RivererÌÌÌÌÌZ
ÍÔpelicanssksÌÌÌÌFitzroy RiverÌÌÌÌÌû[      Í Ðwood ducksksÌÌÌÌFitzroy RiverÌÌÌÌÌ\Í
Ñblack ducksksÌÌÌÌFitzroy RiverÌÌÌÌÌG]      Î      Òwhistling ducksÌÌÌÌFitzroy RiverÌÌÌÌÌO^Î Ñmagpie geeseksÌÌÌÌFitzroy RiverÌÌÌÌÌ_      Ì
Òking fishersksÌÌÌÌFitzroy RiverÌÌÌÌÌ`       ÎÓwater fowlsksÌÌÌÌFitzroy RiverÌÌÌÌÌ;a
ÌÔdab chickssksÌÌÌÌFitzroy RiverÌÌÌÌÌ´bÎ Ðspoon billsksÌÌÌÌFitzroy RiverÌÌÌÌÌ+cÌÔcormorantsksÌÌÌÌFitzroy RiverÌÌÌÌÌY      



This is a copy of BirdRecord Struct
struct BirdRecord            //define a BirdRecord struct
      {
      int reference;//to store the key
      int firstDate;//date variable store date 1st sighting
      int firstMonth;
      int firstYear;
      int latestDate;
      int latestMonth;
      int latestYear;
      char type[BIRD_SIZE];//constant int defined in const.h
      char location[LOCATION_SIZE];//date variable store date last sighting
      //constant int defined in const.h
      int numberOfBirds;
      };

this is a copy of the constants header file
#ifndef CONST_H
#define CONST_H

#include <string>

using std::string;

enum BirdLocationAllWrite{BIRD,LOCATION,ALL,WRITE}; //If to read for option 3, or for option 4, or for option 5, or for option 2(i.e, to write).

const int MAX_SIZE = 10 ;      // Number of bird types & the number of locations
const int BIRD_SIZE = 20 ;     // For printing
const int LOCATION_SIZE = 20 ; // For printing

const int LINES_PER_PAGE = 15;  // To pause the display

const int MENU_CHOICES = 5;

const int MAX_NUMBER_OF_ENTRIES = 100;

// The species of birds

const string BIRD_TYPE[MAX_SIZE] = { "pelicans", "wood ducks", "black ducks", "whistling ducks",
                                                      "magpie geese", "king fishers", "water fowl", "dab chicks",
                                                      "spoon bills", "cormorants" } ;
// The locations
const string LOCATIONS[MAX_SIZE] = { "Awonga Dam", "Fairburn Dam", "Tinaroo Dam", "Ivanhoe Dam",
                                                      "Lake Victoria", "Burnett River", "Burdekin River",
                                                      "Pioneer River", "Mary River", "Fitzroy River" } ;

#endif
0
 
LVL 17

Accepted Solution

by:
rstaveley earned 150 total points
ID: 11994040
Pasting a binary file into a web form doesn't really work. If you can look at the directory listing, you'll be able to provide the answer to 1. However, looking at the struct we can see that BIRD_SIZE and LOCATION_SIZE are both numbers which are divisible by sizeof(int)=4 (assuming your system is a 32-bit one) and all other data are ints, which means that packing is unlikely to be your problem.

Aha... I think I just spotted your problem:

> if(birds.type==option)

This comparison, will only work if birds.type has a '\0' terminus, because birds.type is a char array. Your binary file posting doesn't really make it clear if "whistling ducksÌÌÌÌ" has a '\0' after the 's'.

You could try replacing this comparison with:

   if (option == string(birds.type,option.size())

This creates a temporary string using option.size() characters from birds.type and compares option with the temporary string.
0
 
LVL 17

Expert Comment

by:rstaveley
ID: 11994051
>    if (option == string(birds.type,option.size())

Missing paren:

   if (option == string(birds.type,option.size()))
0
 

Author Comment

by:KazIT
ID: 11995066
thanks for the comment rstaveley.  After implementation of your advices the same output comes to screen....here's the exe file output
          Bird Watching Records Program
        --------------------------------

                1. View sightings from the last excursion

                2. Update the records with the latest sightings

                3. View sightings of a particular type of bird

                4. View sightings of birds in a particular location

                5. View all sightings

                0. Exit

        ---------------------------------

Please enter your selection:  3
        1. pelicans
        2. wood ducks
        3. black ducks
        4. whistling ducks
        5. magpie geese
        6. king fishers
        7. water fowl
        8. dab chicks
        9. spoon bills
        10. cormorants

        Please enter your selection 1
   Sightings                                                       Number
   First        Latest               Bird Type          Location   of Birds
--------------------------------------------------------------------------------

 Total No Of Birds for pelicans are 0
--------------------------------------------------------------------------------

Press any key to continue
0
 
LVL 17

Expert Comment

by:rstaveley
ID: 11995226
In your binary file, I see pelicans listed as "pelicanssksÌÌÌÌ", which makes me suspect that your binary data is corrupt. It looks like the trailing "sksÌÌÌÌ" is left over from the "whistling ducksÌÌÌÌ" entry. However, the method I described would, I expect have worked with this, if by pressing '1' you got the BIRD_TYPE[0].

Since this is a console program can you try adding the following debug to readBinaryRecord?

--------8<--------
int readBinaryRecord(BirdRecord all[],string option,BirdLocationAllWrite BirdOrLocationOrAll)
{
    cout << "Debug: option is \"" << option << "\" and BirdOrLocationOrAll is " << BirdOrLocationOrAll << '\n';
    // ... continues as before
}
--------8<--------

If that doesn't shed any light on the problem, try displaying the comparison strings.

e.g.
--------8<--------
   string comparison(birds.type,option.size());
   if (option == comparison) {
        cout << "Debug: option is \"" << option << "\" and matched comparison is \"" << comparison << "\"\n";
       // ...as before
   }
   else {
        cout << "Debug: option is \"" << option << "\" and unmatched comparison is \"" << comparison << "\"\n";
   }
--------8<--------
0
 

Author Comment

by:KazIT
ID: 11995352
This is the output with your debug option
Please enter your selection:  3
        1. pelicans
        2. wood ducks
        3. black ducks
        4. whistling ducks
        5. magpie geese
        6. king fishers
        7. water fowl
        8. dab chicks
        9. spoon bills
        10. cormorants

        Please enter your selection 1
Debug: option is"pelicans" and BirdOrLocatioOrAll is0
   Sightings                                                       Number
   First        Latest               Bird Type          Location   of Birds
--------------------------------------------------------------------------------

 Total No Of Birds for pelicans are 0
--------------------------------------------------------------------------------

Press any key to continue
0
 

Author Comment

by:KazIT
ID: 11995374
sorry i didn't include the second part...let me try that again
0
 
LVL 17

Expert Comment

by:rstaveley
ID: 11995481
> Debug: option is"pelicans" and BirdOrLocatioOrAll is0

OK, so that sanity-checks your user-interface. Can you see what it displayed by the comparison debug?

i.e.
--------8<--------
   while(! ( inFile.eof() ) )
     {
          inFile.read(reinterpret_cast<char*>(&birds),sizeof(birds) );  //Read a binary record.

          if(BirdOrLocationOrAll== BIRD )//for option 3, that is view sightings on the basis of a particular type of birds.
          {
               if(birds.type==option)
               {
                string comparison(birds.type,option.size());
                if (option == comparison)
                {
                     cout << "Debug: option is \"" << option << "\" and matched comparison is \"" << comparison << "\"\n";
                    // ...as before
                }
                else
                {
                     cout << "Debug: option is \"" << option << "\" and unmatched comparison is \"" << comparison << "\"\n";
                }
           }

    // ...etc
--------8<--------
0
 
LVL 17

Expert Comment

by:rstaveley
ID: 11995510
Oops bad cut, copy and pasting... this is what I meant....
--------8<--------
   while(! ( inFile.eof() ) )
     {
          inFile.read(reinterpret_cast<char*>(&birds),sizeof(birds) );  //Read a binary record.

          if(BirdOrLocationOrAll== BIRD )//for option 3, that is view sightings on the basis of a particular type of birds.
          {
                string comparison(birds.type,option.size());
                if (option == comparison)
                {
                     cout << "Debug: option is \"" << option << "\" and matched comparison is \"" << comparison << "\"\n";
                    // ...as before
                }
                else
                {
                     cout << "Debug: option is \"" << option << "\" and unmatched comparison is \"" << comparison << "\"\n";
                }
           }

    // ...etc
--------8<--------
0
 

Author Comment

by:KazIT
ID: 11995567
dont know if i am doing something wrong but I get compiler errors now one being
"illegal escape sequence" at
                     cout << "Debug: option is \"" << option << "\" and matched comparison is \"" << comparison << "\"\n";
0
 

Author Comment

by:KazIT
ID: 11995602
sorry my mistake the illegal escape sequence error is now gone...but now it's picking up some of my other functions and saying "local funtion definitions are illegal" these are functions that compiled fine before????
0
 

Author Comment

by:KazIT
ID: 11995673
I think i know what this last set of errors are relating to...I have multiple copies of the same project named bird and birds and for some reason it has taken some of the files from each when it has built and I am guessing that is the reason for this latest set of errors
0
 

Author Comment

by:KazIT
ID: 11995770
My apologies rstaveley i will have to leave this for tonight....I have gotten more confused as I have gone along.  I will work on getting the program back to where we spoke about and post my response tomorrow..thanks for the help

Kaz
0
 
LVL 17

Expert Comment

by:rstaveley
ID: 11995945
Have a good rest.
0
 
LVL 39

Assisted Solution

by:itsmeandnobodyelse
itsmeandnobodyelse earned 350 total points
ID: 11998794
It's obvious that all strings in the file have been written unproperly to the file. I suppose that the string have been copied by memcpy or strncpy omitting the terminating zero character. Also the BirdRecord struct has not been initialized before writing.

I don't know whether you have influence on the writing part of the file. If so, you should add a constructor to struct BirdRecord that makes all zero at constructing time:


struct BirdRecord          //define a BirdRecord struct
     {
     int reference;//to store the key
     int firstDate;//date variable store date 1st sighting
     int firstMonth;
     int firstYear;
     int latestDate;
     int latestMonth;
     int latestYear;
     char type[BIRD_SIZE];//constant int defined in const.h
     char location[LOCATION_SIZE];//date variable store date last sighting
     //constant int defined in const.h
     int numberOfBirds;
   
     BirdRecord() { memset(this, 0, sizeof(BirdRecord)); }
     };

Also when copying strings to BirdRecord it should be done like that:

   BirdRecord bird;   // now all is zero because of constructor

   ...

   strcpy(bird.type, BIRD_TYPE[2]);  // copying "black ducks" including terminating zero character


With that, you would read strings properly terminated and not something like

         whistling ducksÌÌÌÌAwonga...



rstaveleys approach now is to accept that data is corrupt but try to read valid data anyhow. That can be done as you 'know' all valid string values. So you can make a left compare of the input string (e. g. birds.type ) and all valid strings. That will work as long as there are no two valid values of different length where the shorter one is a leftside substring of the longer one. And even that could be handled by sorting all valid string values by length in descending order.

Regards, Alex







0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: SunnyDark
This article's goal is to present you with an easy to use XML wrapper for C++ and also present some interesting techniques that you might use with MS C++. The reason I built this class is to ease the pain of using XML files with C++, since there is…
This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a G…
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question