2010-02-04 70 views
1

有誰知道應該如何定義ASF_OBJECT_GUID_TEST以避免在下面標記的行中出現編譯錯誤,或者在哪裏可以找到關於它的更多信息?如何正確定義字符數組

#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

如果你的數據是在編譯時知道,你可以說'的#define ASF_OBJECT_GUID_TEST 「\ X75 \ XB2」'。 – 2010-02-04 05:53:51

回答

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

是一個初始化列表和本身不是在C89的陣列(或指針)。

你,而不是可以使用:

#define ASF_OBJECT_GUID_TEST "\x75\xB2" 
1

你想投的ASF_OBJECT_GUID_TEST,即

testFunction((char[])ASF_OBJECT_GUID_TEST)

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

+0

當然不需要'(char)'在花括號裏面(你可能知道這一點,所以評論主要是針對OP)。此外,這只是C99。 – 2010-02-04 05:52:54

0

感謝。那正是我所期待的。

假設我定義了許多字符串文字,它們有8個字符,其中每個字符實際上是一個字節的值。有沒有辦法通過在每兩個字符之間添加「\ x」來創建一個可以修改這些字符串的宏?

#define TEST SOME_MACRO("33698149") 

如果測試是"\x33\x69\x81\x49"

+1

這應該作爲一個新問題提出,或者您應該編輯原始帖子以包含此問題。 – Ponkadoodle 2010-02-04 06:13:11

+1

絕對是一個新問題,雖然簡短的答案是「不,你不能這樣做」。 – 2010-02-04 06:15:40