2010-02-04 4 views
1

Est-ce que quelqu'un sait comment ASF_OBJECT_GUID_TEST devrait être défini pour éviter les erreurs de compilation dans la ligne indiquée ci-dessous, ou où trouver plus d'informations à ce sujet?Comment définir correctement le tableau char

#define ASF_OBJECT_GUID_TEST {(char)0x75, (char)0xB2, (char)0x00} 

void testFunction(char * testChar) 
{ 

} 

int main(int argc, char * argv[]) 
{ 
    char test[] = ASF_OBJECT_GUID_TEST; 

    testFunction(test); 
    testFunction(ASF_OBJECT_GUID_TEST); // <- fails to compile this line of code 

    return 0; 
} 
+0

Si vos données est connu au moment de la compilation, vous pouvez dire '#define ASF_OBJECT_GUID_TEST "\ x75 \ xB2"'. –

Répondre

2
{(char)0x75, (char)0xB2, (char)0x00} 

est une liste d'initialisation et ne fait pas lui-même un réseau (ou un pointeur) en C89.

Vous pouvez utiliser à la place:

#define ASF_OBJECT_GUID_TEST "\x75\xB2" 
1

vous voulez lancer l'ASF_OBJECT_GUID_TEST, i.e.

testFunction((char[])ASF_OBJECT_GUID_TEST)

ou

#define ASF_OBJECT_GUID_TEST (char[]){(char)...}

+0

Les lancers '(char)' à l'intérieur des accolades ne sont pas nécessaires bien sûr (vous le savez probablement, donc le commentaire est surtout pour l'OP). En outre, ceci est seulement C99. –

0

Merci. C'était exactement ce que je cherchais.

Supposé J'ai défini de nombreux littéraux de chaîne qui ont 8 caractères, et 2 d'entre eux font en fait la valeur d'un octet. Existe-t-il un moyen de créer une macro qui modifierait ces littéraux de chaîne en ajoutant un "\ x" entre chaque couple de caractères comme suit?

#define TEST SOME_MACRO("33698149") 

Où test serait "\x33\x69\x81\x49"

+1

Cela devrait être posé comme une nouvelle question, ou vous devriez modifier votre message original pour inclure cette question. – Ponkadoodle

+1

Certainement une nouvelle question, bien que la réponse courte soit "non, vous ne pouvez pas faire cela". –

Questions connexes