Witam.
Od kilku dni męcze się z pewną funkcją zadanie ma proste podzielić taką tablice:
"$PGTOP,11,2*6E\r\n$GPGGA,000105.799,,,0,0,MM*4B\r\n$GPGSA,A,1,,,,,,,,,,,,,,,*1E\r\n"
Interesuje mnie np. tekst pomiędzy 1 a 2 znakiem '$'. Czyli funkcja powinna wypluć "$PGTOP,11,2*6E".
Teraz chce dowiedzieć się co jest po 2 i 3 znaku ',' tego co otrzymałem czyli w tym wypadku będą to znaki 'A' i '1'.
Tak wygląda funkcja :
char *podziel(int ile,char *ramka,char znaki)
{
static char tab2[50];
int ir=0;
int kk=0;
int yy=0;
while(ramka[kk]!='\0')
{
if(ramka[kk]==znaki)
{
ir++;
if(ir==ile-1){kk++;}
else if(ir==ile) { return tab2; }; //
};
if(ir==ile-1)
{
tab2[yy]=ramka[kk];
yy++;
tab2[yy]='\0';
}
kk++;
}
return tab2;
}
char *A;
char *B;
char *C;
char *RXtemp;
int main(int argc, char *argv[]) {
RXtemp=podziel(2,US_SS,'$');
cout<< RXtemp << endl;
A=podziel(2,RXtemp,',');
cout<< A << endl;
B=podziel(2,RXtemp,',');
cout<< B << endl;
return 0;
}
Niestety funkcja zwraca
PGTOP,11,2*6E
11
11
Zauważyłem rzecz następującą jeśli działam tylko na tablicy
char US_SS[220]={"$PGTOP,11,2*6E\r\n$GPGGA,000105.799,,,0,0,MM*4B\r\n$GPGSA,A,1,,,,,,,,,,,,,,,*1E\r\n"};
np tak:
RXtemp=podziel(2,US_SS,'$');
cout<< RXtemp << endl;
RXtemp=podziel(3,US_SS,'$');
cout<< RXtemp << endl;
RXtemp=podziel(4,US_SS,'$');
cout<< RXtemp << endl;
Wszytko jest w porządku problemy zaczynają się gdy wywołuje funkcje z argumentem RXtemp w którym znajduje się wstępnie obrobiony tekst "$PGTOP,11,2*6E"
Wygląda na to że funkcja modyfikuje mi ten argument tj RXtemp !!!
Czy mógł by ktoś poprawić mi tą funkcje bardzo proszę pomoc .