2013-03-30 6 views
5

私は私のコードで#unsigned char *文字列を#defineにするにはどうすればよいですか?

#define PRODUCTNAME  "SomeName" 

を定義し、次のしていると私は機能com_reply(unsigned char* msg, uint16_t lenght)でそれを送りたいです。

ここで私の議論が署名性が異なるという警告が出ます。

私はunsigned char*ので、私はすべての場所の上に警告を得ることなく、私のプログラム全体でそれを使用することができますように私の文字列を定義することができます方法:私はちょうど知ってほしい、私は問題が何であるかを知っているし、また、なぜcom_replyunsigned char*代わりのchar*を使用しています。

EDIT:

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

は、私が作成する必要があります。

は厳密に私は1つはここに定義し、主な理由はBANNERは、このような他のいくつかの定義、で構成された定義が存在することであるよりも多くを持って話しますconst変数を使用して、ここで定義するのではなく、プログラムの開始時にそれらを連結しますか?

+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

決して非constポインタ –

+0

に決して(または何でも)文字列リテラルを割り当てないでください、これは正しいでしょうか? – thumbmunkeys

+2

文字列リテラルは 'const'ではないので、非constは正しいです。しかし、あなたはそれを変更することができますが、それはできません。 – teppic

関連する問題