03. april 2003 - 18:37Der er
6 kommentarer og 2 løsninger
Fjerne 2 bytes fra streng og erstatte dem med ét
Jeg har følgende problem: Jeg har en funktion som modtager en pointer til et char atray. Hvis char array'et indeholder de 2 bytes T7B+T7C eller T7B+T7D, skal disse erstattes med hhv. FLAG eller T7B ( altså kun ét tegn ) T7B, T7C, T7D, FLAG er konstanter. Jeg har skrevet flg. kode:
int dlLag::fjernStartStop(char *in, int l) { char buf[1050]; int p = 0 ; for ( int i = 0 ; i < l ; i++ ) { if ( in[i] == T7B ) { if ( in[i+1] == T7C ) { buf[p] = FLAG ; } if ( in[i+1] == T7D ) { buf[p] = T7B ; } i++; }else { buf[p] = in[i] ; } p++; }
for ( int i = 0 ; i < p ; i++ ) in[i] = buf[i] ; in[p] = 0 ;
return p ; }
Det virker ikke. Selvom strengen jeg sender med indeholder én af de 2 byte sekvenser, erstattes de ikke, som de skal. Hvad har jeg gjort forkert, og hvordan får jeg det til at virke ? Kan det gøres smartere ?
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Mærkeligt ... kan jeg lokke dig til at forsøge med de samme konstanter, som jeg bruger ? const char FLAG = 0x7E; const char T7B = 0x7B; const char T7C = 0x7C; const char T7D = 0x7D;
Nu virker det. Fejlen lå ikke i denne funktion men et andet sted i klassen - jeg kom til at bruge en forkert pointer - en gang i mellem kan man vist stirre sig blind på en fejl ;-)
Jeg vil gerne give point for din hjælp, hvis du lægger et svar.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.