Mam wiele funkcji, które oczekują ciąg jako argument, dla którego używam char*
, ale wszystkie moje funkcje, które oczekują tablicy bajtowej, również używać char*
.Rozróżnianie ciągów znaków i tablic bajtów?
Problem polega na tym, że mogę łatwo popełnić błąd przekazywania tablicy bajtów w funkcji łańcuchowej, powodując wszelkiego rodzaju przepełnienia, ponieważ nie można znaleźć terminatora o wartości NULL.
W jaki sposób jest to zwykle powiązane? Mogę sobie wyobrazić zmianę wszystkich funkcji tablic bajtowych, aby uzyskać uint8_t
, a następnie kompilator będzie ostrzegał o podpisie, gdy przekażę ciąg. A co jest właściwym podejściem?
Zrób opakowanie dla tablicy bajtów ?? –
@VaughanHilts Nie rozumiem, jak to rozwiązuje mój problem? – Muis
Łańcuch * to * tablica bajtów. Ponieważ w rzeczywistości nie można przekazać tablic w C, a jedynie wskaźnik do pierwszego elementu, zwykle trzeba również przekazać rozmiar. Po prostu sprawdź, czy tablica zawiera zerową wartość. Jeśli tak, to jest to "ciąg". W przeciwnym razie nie jest. –