2013-03-30 47 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

相关问题