witam ponownie. musze was zapytac co z tym fantem zrobic. mam sobie powiedzmy wskaznik wskazujacy na wskaznik elementow (char jest wyjatkiem że od razu dane mozna pakowac zamiast wskaznika) i po przeslaniu danych na drugą strone (serwer lub klient), konwertuje dane na właściwy typ. Problem jest tylko ze wskaźnikami, np. ze wskaznikiem na jakiś tekst (char*) to dane(tekst) otrzymane po drugiej stronie nie są takie same, a właściwie są tylko LOSOWE TEKSTY więc zaistniał jakiś problem z wysłaniem wskaźnika, który jest wskazywany przez inny wskaźnik. Podam to na przykladzie, bo namieszalem...
Wysyłanie:
char **test = new char*[2];
int liczba = 123456789;
char *tmp = "jest to wskaznik, ktory będzie wskazywany przez inny wskaznik";
test[0] = (char*)liczba; //Zwykłe dane (non-pointer)
test[1] = tmp; //Wskaznik ten jest teraz wskazywany przez wskaznik test
send(gniazdo,(char*)test,4 + strlen(tmp),NULL);
Odbieranie:
char **test = new char*[2];
for(int i = 0; i < 2; i++)
test[i] = new char;
cout << "Bytes: " << recv(gniazdo,(char*)test,100,NULL) << endl;
cout << (int)test[0] << endl;
cout << test[1] << endl;
Wynikiem tego jest, że po stronie odbiorczej w pierwszym elemencie tablicy wartość liczby int jest prawidłowa (czyli 123456789), lecz w drugim elemencie są DZIWNE LOSOWE TEKSTY. Moge wnioskowac tylko, że wskaznik ktory jest wskazywany przez inny wskaznik jego dane nie zostana prawidlowo przeslane. Lecz sam goly wskaznik przesle swoje dane prawidlowo:
char *tmp = "jest wskaznikiem przez żadnego wskazywanym";
send(sock,tmp,strlen(tmp),NULL);
jak widac jest to wskaznik nie wskazywany przez zaden inny wskaznik i po stronie odbiorczej dane sa prawidlowo przeslane. Doradźcie mi co z tym zrobic, chetnie was wyslucham.