2011-03-17 24 views
6

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?

+0

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. –

Odpowiedz

8

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" };.

1

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ć.

+0

Ale czy jest jakiś sposób na zrobienie czegoś takiego? Jak, mogę zadeklarować taką tablicę (char blah [] = {0x1, 0x2,0x3};) –

1

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"}; 
1

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.