Как назначить массив символов в структуре inline? - PullRequest
6 голосов
/ 17 марта 2011

Я пытаюсь сделать что-то вроде этого:

struct SomeStruct {
    const char *bytes;
    const char *desc;
};

SomeStruct example = { { 0x10, 0x11, 0x12, 0x13 }, "10-13" };

Почему это не работает?

Ответы [ 4 ]

8 голосов
/ 17 марта 2011

Возможно, потому что { 0x10, 0x11, 0x12, 0x13 } - это массив char, а не указатель на char.

Попробуйте SomeStruct example = { "\x10\x11\x12\x13", "10-13" };.

1 голос
/ 17 марта 2011

Как уже говорили другие, ваша последовательность инициализатора действительна для массив, а структура содержит указатель. Ты можешь использовать ответ Марагуиды, используя строковый литерал, но ИМХО, это не самый читаемый (и он не будет работать, если, скажем, вы решите заменить явные константы манифестными константами). более общим решением является определение отдельного именованного массива и используйте это:

char const structBytes10to13[] = { 0x10, 0x11, 0x12, 0x13 };
SomeStruct example = { structBytes10to13, "10-13" };

Это будет работать для произвольных выражений инициализации в массив символов.

1 голос
/ 17 марта 2011

Поскольку компилятор не может преобразовать {1, 2, 3, 4} в указатель на байты (он может преобразовать "10-13" в указатель на символ).

Вы можете указать байты в формате 'string' (, если вы не возражаете против дополнительных 0x00 в памяти, на которые указывает bytes):

SomeStruct example = {"\x10\x11\x12\x13", "10-13"};
1 голос
/ 17 марта 2011

Поскольку синтаксис { ... } подходит только для назначения массивов, тогда как const char* является указателем, а не массивом.

Если вы объявляете bytes как массив вместо - char bytes[4]; -назначение будет работать.

...