Czyszczenie bufora

0

Czesc! W jaki sposób oczyszczać bufor aby nie było tam zadnych śmieci i wczytać tylko to co mnie interesuje. Wczytuje z pliku po kilkanascie bajtow do bufora tworzonego dynamicznie i zostają mi tam śmieci ktorych nie chce. Jest cos takiego:

int aaa,bbb;
AnsiString ddd;
for (int i=0;i<RecNum;i++) {
      for (int j=0;j<licz;j++) {
            aaa=head[j].RecLength;
            buf = new char[aaa];
            fread(buf,sizeof(char),aaa,load_dbf);
            ddd = buf;
            bbb = ftell(load_dbf);
            delete []buf;
        }
   }

W buf zostają mi śmieci ktorych nie chce zapisywac a pobierać musze koniecznie określoną ilość bajtów. Gdy debuguje mam coś takiego
ddd: { " Murmansk \x1E\x02" }
ddd: { " Russia j" }
Mi jest potrzebne tylko Murmansk Roussia itd.
Za podpowiedzi wielkie dzięki.

0
int aaa,bbb;
AnsiString ddd;
for (int i=0;i<RecNum;i++) {
      for (int j=0;j<licz;j++) {
            aaa=head[j].RecLength;
            buf = new char[aaa];
<b>         for(int i=0;i<aaa;i++)
               buf[i]=NULL;</b>
            fread(buf,sizeof(char),aaa,load_dbf);
            ddd = buf;
            bbb = ftell(load_dbf);
            delete []buf;
        }
   }
0

strcpy(buf, "") / strcpy(buf, " ")
Może pomoże

0
Ganges napisał(a)

Czesc! W jaki sposób oczyszczać bufor aby nie było tam zadnych śmieci i wczytać tylko to co mnie interesuje. Wczytuje z pliku po kilkanascie bajtow do bufora tworzonego dynamicznie i zostają mi tam śmieci ktorych nie chce. Jest cos takiego:

int aaa,bbb;
AnsiString ddd;
for (int i=0;i<RecNum;i++) {
      for (int j=0;j<licz;j++) {
            aaa=head[j].RecLength;
            buf = new char[aaa];
            fread(buf,sizeof(char),aaa,load_dbf);
            ddd = buf;
            bbb = ftell(load_dbf);
            delete []buf;
        }
   }

W buf zostają mi śmieci ktorych nie chce zapisywac a pobierać musze koniecznie określoną ilość bajtów. Gdy debuguje mam coś takiego
ddd: { " Murmansk \x1E\x02" }
ddd: { " Russia j" }
Mi jest potrzebne tylko Murmansk Roussia itd.
Za podpowiedzi wielkie dzięki.

A czy wiesz że łańcuch znakowy w C jest zakończony znakiem o kodzie '\0' ? To jeżeli go nie wstawisz do bufora to wszystko do pierwszego zera jest traktowane jako łańcuch znaków. Ale postępowanie w twoim programie zależy od tego co chcesz zrobić... Zapisanie zera na końcu bufora będzie OK.


          aaa=head[j].RecLength;   //!! nie wiem czym u ciebie jest RecLength
                                   //!! ale jesli to tylko dlugosc lancucha to..
          buf = new char[aaa + 1]; //!! ... +1 na koniec stringa!!
          fread(buf,sizeof(char),aaa,load_dbf);
          // i np.
          buf[RecLength-1] = 0; //!! zakoncz bufor
          
          ddd = buf;

I to nie ma nic wspólnego z żadnym "czyszczeniem bufora", bo i tak cały bufor zapełniałeś wczytywanymi znakami, tylko zapomniałeś zakończyć łańcuch znakowy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1