2017-05-13 1 views
-1

Je travaille sur Keil compilateur pour les contrôleurs ARM et le code écrit en C. Je suis coincé avec cet avertissement que je reçois ceci:Avertissement passage « char [] » au paramètre de type « unsigned char * »

warning : passing 'char [7]' to parameter of type 'unsigned char *'converts between pointers to integer types with different sign. 

routine:

void WriteString(unsigned char *Msg_add) 
    { 
     for(Lcd_pointer=0; Lcd_pointer < 16; Lcd_pointer++) 
     { 
      Write_lcd_data(*Msg_add); 
      Msg_add++; 
      if(*Msg_add == '\0') 
       break; 
     } 
    } 

Je passe au-dessus de routine avec chaîne aléatoire:

WriteString("Token:"); 

les fucntions fonctionne de la manière, mais Je reçois cet avertissement. Comment enlever?

+1

'WriteString ((unsigned char *)" Token: " – EOF

+0

Le compilateur peut avoir un commutateur pour permettre la conversion implicite entre les types de pointeur vers caractères –

Répondre

3

Ceci est l'avertissement attendu que "Token:" est de type const char *
mais void WriteString(unsigned char *Msg_add) attend unsigned char *

Vous devez taper jeter l'argument

WriteString((unsigned char*) your_data); 
+1

Notez que les littéraux de chaîne dans C ne sont pas const qualifié et ont le type * tableau de char *. Naturellement, il y a la conversion en * pointeur en char * dans la plupart des contextes. –

+0

J'ai mis à jour la réponse – Ajay

+0

Je ne voulais pas dire que la fonction ne devrait pas prendre les pointeurs const (unsigned) char, mais que "as" Token: "est de type const char *" est trompeur. S'il vous plaît, faites des fonctions avec des const consts, si elles n'ont pas l'intention de les modifier, c'est un conseil judicieux. Et vous avez raison de dire que vous ne pouvez pas modifier les littéraux de chaîne, même s'ils ne sont pas const. –