2017-05-13 3 views
-1

Ich arbeite an Keil Compiler für ARM-Controller und das Schreiben von Code in C mich mit dieser Warnung steckt ich erhalte diese:Warnung vorbei ‚char []‘ auf Parameter vom Typ ‚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; 
     } 
    } 

ich oben Routine bin vorbei mit zufälligen Zeichenfolge:

WriteString("Token:"); 

die fucntions durch die Art und Weise funktioniert, aber Ich bekomme diese Warnung. Wie zu entfernen?

+1

'Write ((unsigned char *)" Token: ");' – EOF

+0

Der Compiler kann einen Schalter haben, um implizite Konvertierung zwischen Zeiger-zu-Zeichen-Typen zuzulassen –

Antwort

3

Dies ist die erwartete Warnung als "Token:" vom Typ const char *
aber void WriteString(unsigned char *Msg_add) erwartet unsigned char *

Sie müssen das Argument zu gieße Typen

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

Beachten Sie, dass Zeichenfolgenliterale in C nicht const qualifiziert sind und Typ * Array von char * haben. Natürlich gibt es in den meisten Kontexten die Umwandlung zu * pointer to char *. –

+0

Ich aktualisierte die Antwort – Ajay

+0

Ich meinte nicht, dass die Funktion keine const (unsigned) Zeichenzeiger nehmen soll, aber das "wie" Token: "ist vom Typ const char *" ist irreführend. Bitte machen Sie Funktionen, nehmen Sie Konst-Zeichen, wenn sie nicht beabsichtigen, sie zu modifizieren, das ist ein guter Rat. Und Sie haben Recht, dass Sie String-Literale nicht ändern können, obwohl sie nicht const sind. –