Próbuję zrobić coś takiego:Jak przypisać tablicę znaków w struct inline?
struct SomeStruct {
const char *bytes;
const char *desc;
};
SomeStruct example = { { 0x10, 0x11, 0x12, 0x13 }, "10-13" };
Dlaczego to nie działa?
Próbuję zrobić coś takiego:Jak przypisać tablicę znaków w struct inline?
struct SomeStruct {
const char *bytes;
const char *desc;
};
SomeStruct example = { { 0x10, 0x11, 0x12, 0x13 }, "10-13" };
Dlaczego to nie działa?
Prawdopodobnie dlatego { 0x10, 0x11, 0x12, 0x13 }
jest tablicą char
, a nie wskaźnik do char
.
Zamiast tego spróbuj SomeStruct example = { "\x10\x11\x12\x13", "10-13" };
.
Ponieważ składnia { ... }
nadaje się tylko do przypisywania tablic, natomiast const char*
jest wskaźnikiem, a nie tablicą.
Jeśli zadeklarujesz bytes
jako tablicę zamiast - char bytes[4];
- zadanie będzie działać.
Ale czy jest jakiś sposób na zrobienie czegoś takiego? Jak, mogę zadeklarować taką tablicę (char blah [] = {0x1, 0x2,0x3};) –
Ponieważ kompilator nie może przekonwertować {1, 2, 3, 4}
na wskaźnik na bajty (może przekonwertować "10-13" na wskaźnik na znak).
Można określić bajtów w formacie „string” (jeśli nie przeszkadza dodatkowy 0x00 w pamięci wskazywanego przez bytes
):
SomeStruct example = {"\x10\x11\x12\x13", "10-13"};
Jak mówili inni, swoją sekwencję initializer jest poprawna dla tablicy , a struktura zawiera wskaźnik. Możesz użyć odpowiedzi maraguidy , używając literału tekstowego, ale IMHO, to nie jest najbardziej czytelne (i nie zadziała, jeśli, na przykład, zdecydujesz , aby zastąpić stałe stałe stałe). Im bardziej ogólne rozwiązanie jest zdefiniowanie osobnego nazwie tablicę, a używać go:
char const structBytes10to13[] = { 0x10, 0x11, 0x12, 0x13 };
SomeStruct example = { structBytes10to13, "10-13" };
To będzie pracować dla dowolnych wyrażeń inicjujących w tablicy znaków.
Jakiego błędu dostałeś? Jeśli publikujesz pytanie o * coś nie działa * zawsze opublikuj błąd lub nieprawidłowe zachowanie, które otrzymujesz. –