Jak pogodzić funkcje z wskaźnikiem

0

Witam.
Napisałem sobie prostą funkcję która za każdym wywołaniem dzieli tablice znaków w pewien sposób.
Wszystko wydaje się działać prawidłowo z jednym ale.
Mianowicie jak widać w załączonym kodzie w ciele funkcji odwołuję się do globalnego wskaźnika. Moje pytanie jak wywołać funkcję z tym wskaźnikiem jako argumentem.

#include <iostream>
#include <cstdio>
#include <string.h>

using namespace std;

char *Y;   //GŁOWNY wskaznik

char bufor[20]= {"1A,2B,3C,4D,5E"};//"PGTOP,11,2*6E"};

char cokolwiek;
	
char *szuk(char *txt, char zn )
{
   char t[10]={0,0,0,0,0,0,0,0,};
 	int i=0;
 		
 	
   while (*Y != zn)
   {  
   t[i++]=*Y;
	 Y++;   
   }
    
  t[i]='\0';
  Y++;
  		    
 	return t;
}

Jest :

int main(int argc, char argv[]) {
	
	Y=bufor;	
	
cout << szuk(cokolwiek,',' )<< endl;
		
	return 0;
}

Powinno być:

int main(int argc, char argv[]) {
	
	Y=bufor;	
	
cout << szuk( Y,',' )<< endl; //Y jako argument 
		
	return 0;
}
0

W ciele swojej funkcji zamień wszystkie wystąpienia Y na txt.

ps. nie możesz zwracać wskaźników do lokalnych tablic w funkcji. Po wyjściu z funkcji musisz przyjąć, że wszystkie zmienne lokalne już nie istnieją.

0

Hehe to jasne , tyle że po zmianie nie będzie to działać jak nalezy.
Dla przykładu teraz efekt funkcji wygląda tak

	
Y=bufor;	
	
cout << szuk( Y,',' )<< endl;
cout << szuk( Y,',' )<< endl;

wynik:

1A
2B

Gdy zmienie Y na txt :

1A
1A

tak jak by wskaźnik zamienił się w lokalny.

Co do zwracania wskaźnika do tablicy lokalnej , to szczerze mówiąc nie wiem jak to inaczej zrobić aktualnie to działa prawidłowo.
Ewentualnie czy mógł bym prosić o poprawienie , naprawienie mojej biednej funkcji.

0

I nie wiem w zasadzie dlaczego nie skorzystasz z biblioteki standardowej? Masz strtok do tego.

A nie działa tak jak chcesz, bo w swojej funkcji zmieniasz wskaźnik (inkrementujesz go), a chcesz, żeby kolejne wywołanie funkcji dostało już ten zmieniony. Do funkcji musisz przyjąć wskaźnik na wskaźnik albo referencję do wskaźnika.

0

A mógł bym prosić o jakiś przykład jak ją stosować?
Ogólnie to jestem początkujący i staram się sam pisać funkcje.

0

Dobra jakoś z tym strtok'iem sobie poradziłem.
Dla spokoju jednak chciał bym zrozumieć czego ta moja funkcja taka kulawa.

0

Witam ponownie jednak ta funkcja ma poważny mankament.

Chce wyłuskać np liczbe 9 z takiego łańcucha:

*$GPGSA,A,19,,,,,,,,,,,1E"

Przykładowa funkcja:

char US_RX[220]={"$PGTOP,11,2*6E$GPGGA,000105.799,,,,,0,0,,,M,,M,,*4B$GPGSA,A,1,,9,,,,,,,,,,,,,*1E"};

RXtemp = strtok( US_RX, "$\0" ); //czytaj  ramke 1

RXtemp = strtok( 0, "$\0" );  //czytaj  ramke 2	 
	 
RXtemp = strtok( 0, "$\0" );  //czytaj  ramke 3	
	
	
Speed=			 strtok( RXtemp, ",");//GPGSA
Speed= 			 strtok(0, ",");//A
Speed= 		   	 strtok(0, ",");//1
Speed= 		  	 strtok(0,",");//' '
Speed= 		  	 strtok(0, ",");//'9
cout<<	Speed<< endl;

Taka funkcja gubi się gdy zobaczy kilka ',' (przecinków) po sobie i w rezultacie liczba "9" nie jest na 5 miejscu . Jak to okiełznać?

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