2013-03-30 48 views
5

我有如下定義在我的代碼我如何#define一個無符號字符*字符串?

#define PRODUCTNAME  "SomeName" 

,我想用一個函數com_reply(unsigned char* msg, uint16_t lenght)發送。

現在我得到一個警告,說明我的論點在簽名方面有所不同。我知道問題是什麼,也就是爲什麼com_reply使用unsigned char*代替char*,我只是想知道:

我如何定義我的字符串作爲unsigned char*這樣我就可以用它在我的計劃沒有得到所有的地方警告。

編輯:

嚴格地說我有一個以上的定義這裏的主要原因是,有一個BANNER定義它由其他幾個定義的,就像這樣:

#define PRODUCTNAME  "SomeName" 
#define PRODUCTDATE  "2013-03-30" 
#define BANNER   PRODUCTNAME " (" PRODUCTDATE ")" 

我應該創建const變量並在程序啓動時連接它們,而不是在這裏使用define?

+1

爲什麼不'爲const char * PRODUCTNAME = 「SomeName」'或類似的? (不相關,但#define有很多缺點)。 –

+1

我不知道這是如何符合標準的,但是怎麼樣:'(const unsigned char *)「SomeName」' – Mysticial

+2

出於好奇,「com_reply」功能呢?它看起來應該不是一個字符串,而是一個指向0到255之間數字的指針。 – austin

回答

10

這應該工作:

#define PRODUCTNAME  ((const unsigned char *)"SomeName") 
+4

永遠不要將字符串文字分配(或強制轉換)非常量指針 –

+0

謝謝,正確地指出,所以這是正確的? – thumbmunkeys

+2

非const是正確的,因爲字符串文字不是'const'。但它意味着你可以修改它,而你不能。 – teppic

相關問題