2013-03-30 14 views
5

Mam następujący zdefiniować w kodzieJak # zdefiniować ciąg znaków bez znaku *?

#define PRODUCTNAME  "SomeName" 

i chcę, aby wysłać go z funkcji com_reply(unsigned char* msg, uint16_t lenght).

Teraz dostaję ostrzeżenie, że mój argument różni się sygnatariuszem. Wiem w czym jest problem, a także dlaczego com_reply wykorzystuje unsigned char* zamiast char*, po prostu chcę wiedzieć:

Jak mogę określić mój ciąg jako unsigned char* więc można go używać w całym moim programie bez uzyskiwania ostrzeżeń wszędzie .

EDIT:

Ściśle mówiąc mam więcej niż jeden określa tutaj, a głównym powodem jest to, że istnieje BANNER określić, które składa się z kilku innych określi, tak:

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

należy utworzyć ustawiaj zmienne const i łącz je podczas startu programu, zamiast używać tutaj definiujących?

+1

Dlaczego nie 'const char * PRODUCTNAME = "somename"' lub podobne? (niezwiązane, ale #define ma wiele wad.) –

+1

Nie wiem jak to jest zgodne z normami, ale co z: '(const unsigned char *)" SomeName "' – Mysticial

+2

Z ciekawości, co robi 'com_reply' funkcja? Wydaje się, że jest to coś, co nie powinno w rzeczywistości przyjmować ciągu, ale raczej wskaźnik do liczby od 0 do 255. – austin

Odpowiedz

10

To powinno działać:

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

Nigdy nie przypisuj (ani nie rzucaj) literałów strunowych do nieregularnych wskaźników –

+0

dzięki, odpowiednio zaznaczone, więc czy to się zgadza? – thumbmunkeys

+2

Niestałość jest poprawna, ponieważ literał łańcuchowy nie jest "const". Ale to oznacza, że ​​możesz go zmodyfikować, czego nie możesz. – teppic

Powiązane problemy