2011-03-17 19 views
6

estoy tratando de hacer algo como esto:¿Cómo asignar una matriz de caracteres en struct inline?

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

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

Por qué no está funcionando?

+0

¿Qué error está obteniendo? Si está publicando una pregunta sobre * algo que no funciona * siempre publique el error o el comportamiento incorrecto que está recibiendo. –

Respuesta

8

Probablemente porque { 0x10, 0x11, 0x12, 0x13 } es una matriz de char, no un puntero a char.

Pruebe SomeStruct example = { "\x10\x11\x12\x13", "10-13" }; en su lugar.

1

Porque la sintaxis { ... } solo es adecuada para asignar matrices, mientras que const char* es un puntero, no una matriz.

Si declara bytes como una matriz en su lugar - char bytes[4]; - la asignación funcionará.

+0

¿Pero hay alguna manera de hacer que algo así funcione? Al igual, puedo declarar una matriz como esa (char blah [] = {0x1, 0x2, 0x3};) –

1

Porque el compilador no puede convertir {1, 2, 3, 4} en un puntero a bytes (puede convertir "10-13" en un puntero en char).

Puede especificar los bytes en formato de 'cadena' (si no te importa un 0x00 extra en la memoria apuntada por bytes):

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

Como otros han dicho, la secuencia de inicialización es válido para una matriz , y la estructura contiene un puntero. Puede usar respuesta de maraguida, usando un literal de cadena, pero en mi humilde opinión, este no es el más legible (y no funcionará si, por ejemplo, decide para reemplazar las constantes explícitas con constantes de manifiesto). La solución más general es definir una matriz denominada separada, y usarlo:

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

Esto funcionará para expresiones de inicialización arbitrarias de la matriz carácter.

Cuestiones relacionadas