2016-12-22 4 views
-1

Ich habe einen Zeiger auf eine Zeichenfolge, die "unsigned char *" ist, und ich möchte es als Argument in strncmp() -Funktion verwenden. Aber Compiler beschwert:Making strncmp() akzeptieren unsigned char * als Argument

invalid conversion from 'unsigned char*' to 'const char*' 

Wie kann ich machen:

strncmp(const char *a, unsigned char *b, size_t size); 

Arbeit?

Gibt es eine Problemumgehung?

+0

müssen Sie mehr Kontext (dh Code) – artm

+3

Warum ist die Zeichenfolge 'unsigned char' zur Verfügung zu stellen? – StoryTeller

+0

strncmp() akzeptiert arg 1 und arg 2 als const char *. Aber das Argument 2, das ich habe, ist vom Typ 'unsigned char *' und Argument 1 ist 'const char *'. Wie kann ich die Funktion mit meinen Argumenten arbeiten lassen? – tinga

Antwort

3

Sie können unsigned in signed sicher übertragen.

unsigned char * p2 = ...; 
strncmp(px, (char *)p2, 5); 

sollte funktionieren.

unsigned char * p2 = ...; 
char * p3 = static_cast<char *>(p2); 

Das ist vielleicht übertrieben.

+0

Kein Problem von signed oder unsigned. Ausgabe von const vs nicht-const – tinga

+2

const bedeutet strncmp wird den Inhalt nicht ändern, was kein Problem ist hier ... – user3195397

+0

@tinga Neugierig, haben Sie diese Antwort versucht? Ich würde erwarten, dass das Problem ein Zeiger auf signierte und nicht signierte ist. – chux

0

Nicht sicher, warum Sie unsigned char* verwenden, aber wenn Sie müssen, verwenden Sie eine Besetzung. Zum Beispiel:

strncmp(a, (char*)b, 10);

0

Verwendung reinterpret_cast es zu konvertieren. So etwas wie diese -

strncmp(const char *a, reinterpret_cast<const char*>(unsigned char 
*b), size_t size);