2016-12-22 7 views
-1

"unsigned char *"という文字列へのポインタがあり、strncmp()関数の引数として使用したいと思います。 しかし、コンパイラ文句:strncmp()がunsigned char *を引数として受け入れる

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

どのように私が作ることができます。

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

仕事?

回避策はありますか?

+0

あなたはより多くのコンテキスト(すなわちコード)を提供する必要が – artm

+3

なぜ、あなたの文字列は '符号なしchar'のですか? – StoryTeller

+0

strncmp()は、arg 1とarg 2をconst char *として受け入れます。しかし、引数2は 'unsigned char *'型で、引数1は 'const char *'です。関数を自分の引数で動作させるにはどうすればよいですか? – tinga

答えて

3

unsignedを署名付きに安全にキャストすることができます。

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

が有効です。

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

これはおそらく過剰です。

+0

署名付きまたは署名なしの問題はありません。 const対非const – tinga

+2

constの問題は、strncmpがここで心配しない内容を変更しないことを意味します... – user3195397

+0

@tinga好奇心、この答えを試しましたか?私はその問題が、署名されたものと署名されていないものへのポインタになると期待しています。 – chux

0

unsigned char*を使用している理由がわかりませんが、必要な場合はキャストを使用してください。たとえば:

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

0

使用reinterpret_castは、それを変換します。このような何か -

strncmp(const char *a, reinterpret_cast<const char*>(unsigned char 
*b), size_t size); 
関連する問題