Jakub L.

Jakub L. Programista

Temat: Pytanie

Jarek Karciarz:
Również nie polecam memcpy(). Mogą wystapić bajty z zerem binarnym, który jak wiadomo oznacza koniec łańcucha. Wtedy twoje dane zostaną obcięte. Chyba, ze osobno podasz długość

Od kiedy?
całego bufora, wtedy #pragma pack załatwi sprawę.
Ogólnie, jesli chcesz przenosić struktury na tekst i odwrotnie, to dla każdego typu danych występującego w strukturze, musisz dostarczyć funkcję konwertującą dany typ na tekst i odwrotnie.

Ogólnie, to char* niekoniecznie musi być tekstem, tylko oznaczeniem wskaźnika do obszaru pamięci mierzonego w 8 bajtowych jednostkach.
Jak się nie będzie tykało tego funkcjami str*, będzie spoko.
Wtedy będziesz mógł przenosić pomiędzy róznymi maszynami i
systemami. To nie jest trywialne zadanie i mocno zależy od costam costam. Myślę, że pomysłodawcy nie chodziło o zwykłe memcpy, bo wtedy wystarczy użyć #pragma, podac adres i rozmiar struktury
i adres rzutować ze struct * na char*. Na pewno nie o to chodziło.

Myślę że jednak mu chodziło.
Jak widać studenty mają a tym problemy, i jakoś muszą się nauczyćrobić tak proste rzeczy (dla tych, którzy już to robili), żeby potem mogli się trykać z endianness, alignmentem i tym podobnymi pierdołami.
A przed webservices, xml, soap i json była jeszcze CORBA :)

Temat: Pytanie

Tomasz Kaczanowski:
Łukasz Cepowski:
Tomasz Kaczanowski:
A z char nie jest to zależne od ustawień kompilatora?
a tego niewiem, jedynie slyszalem ze wielkosc char nie koniecznie musi wynosci 8bitow moze byc wieksza...

To pamiętam należało to pilnować w starszych kompilatorach, nie wiem co mówią na ten temat najnowsze standardy, nie zwracałem na to uwagi, po prostu wtedy, gdy chce miec pewność posiadania char ze znakiem bądź bez, używam signed albo unsigned, ponieważ wcześnie było to zależne od ustawaień w kompilatorze.
Standard mowi 2 podstawowe rzeczy:
- char musi byc na tyle duzy, zeby zmiescic znaki z podstawowego zestawu,
- to, czy char moze zawierac wartosci < 0 jest zalezne od implementacji.
W wiekszosci kompilatorow faktycznie mozna zmieniac czy typ 'char' (bez signed/unsigned) jest ze znakiem (zazwyczaj domyslnie) czy bez (/J w MSVC, -funsigned-char w GCC).
Tomasz Kaczanowski

Tomasz Kaczanowski Ot, programista

Temat: Pytanie

Łukasz Cepowski:
Jarek Karciarz:
Również nie polecam memcpy(). Mogą wystapić bajty z zerem binarnym, który jak wiadomo oznacza koniec łańcucha. Wtedy twoje dane zostaną obcięte. Chyba, ze osobno podasz długość całego bufora, wtedy #pragma pack załatwi sprawę.
memcpy,strncpy jest odporne na null terminator, strcpy faktycznie skopiuje wszystko do nulla


strncpy tez zatrzyma się na bajcie o wartości 0.
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: Pytanie

Tomasz Kaczanowski:
strncpy tez zatrzyma się na bajcie o wartości 0.
a no faktycznie :)

Następna dyskusja:

(virtual?) vector - pytanie.




Wyślij zaproszenie do