1

すべての標準機能のすべてのアドレスを知りたい。しかし、wcsstrだけが奇妙です。アドレス値をログに記録するためのパラメータとして変換またはプッシュできませんでした。その間 :

void *address = printf; //OK
void *address = scanf; //OK
void *address = wcsstr; //Compling error!!!

error C2440: 'initializing' : cannot convert from '' to 'void *'

その定義は奇妙です。''定義とは何ですか?多分それは「複雑な関数定義???」です

方法さえ:

printf("Address of wcsstr : 0x%X", wcsstr);

また、私はクレイジーなコンパイルエラーを見つけました:

error C2664: 'printf' : cannot convert parameter 2 from 
'unsigned short *(unsigned short *,const unsigned short *)' to '...'

この問題を解決する方法は?

4

1 に答える 1

0

非標準の変換とは別に、を使用しstatic_castて、関数の目的のオーバーロードを選択できます。

例えば

void *address = static_cast<wchar_t const* (*) ( const wchar_t*, const wchar_t* )>( wcsstr );

またはもっと明確に(IMHO)、

typedef wchar_t const* Foo( const wchar_t*, const wchar_t* );
void *address = static_cast<Foo*>( wcsstr );

おそらくそこに追加しconstます、それはほとんど常に良い考えです…;-)

于 2013-01-30T06:11:40.177 に答える