2013-03-30 5 views
5

Ho seguito definire nel mio codiceCome posso # definire una stringa char * senza segno?

#define PRODUCTNAME  "SomeName" 

e voglio inviarlo con una funzione com_reply(unsigned char* msg, uint16_t lenght).

Ora ricevo un avviso che la mia argomentazione differisce in termini di affidabilità. Io so qual è il problema e anche per questo com_reply utilizza in unsigned char* invece di char*, voglio solo sapere:

Come posso definire il mio stringa come unsigned char* così posso usarlo per tutto il mio programma senza ottenere avvisi in tutto il luogo .

EDIT:

Strettamente parlando ho più di un definisce qui e la ragione principale è che c'è una BANNER definiscono che consiste di diverse altre definisce, in questo modo:

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

Devo creare le variabili const e le concatenano all'avvio del programma invece di usare definisce qui?

+1

Perché non 'const char * PRODOTTO = "SomeName"' o simili? (non correlato, ma #define ha molti svantaggi per questo.) –

+1

Non so come sia compatibile con lo standard, ma che dire: '(const unsigned char *)" SomeName "' – Mysticial

+2

Per curiosità, che cosa significa 'com_reply'? funzione? Sembra che sia qualcosa che non dovrebbe in realtà prendere una stringa, ma piuttosto un puntatore a un numero compreso tra 0 e 255. – austin

risposta

10

Questo dovrebbe funzionare:

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

Mai assegnare (o lanciare qualunque) stringhe letterali a puntatori non costanti –

+0

grazie, debitamente annotato, quindi sarebbe corretto? – thumbmunkeys

+2

Non-const è corretto, poiché una stringa letterale non è 'const'. Ma implica che puoi modificarlo, cosa che non puoi. – teppic