32ビットと64ビットの両方のアーキテクチャで有効なintptr_t
およびuintptr_t
の文字列形式は何ですか。
編集
warning: format ‘%x’ expects type ‘unsigned int’, but argument 2 has type "AAA"
これは、64ビットでは表示されるが32ビットでは表示されない警告です。
intptr_t AAA
これは、inttypes.h
の次のマクロになります。
printf
の場合:PRIdPTR PRIiPTR PRIoPTR PRIuPTR PRIxPTR PRIXPTR
scanf
の場合:SCNdPTR SCNiPTR SCNoPTR SCNuPTR SCNxPTR
使用例:
uintptr_t p = SOME_VALUE;
printf("Here's a pointer for you: %" PRIxPTR "\n", p);
「z」修飾子の使用を検討する必要があると思います。これは、size_tとssize_tに対応するすべてのものを変換します。また、(u)intptr_tでも機能することがわかりました。
例えば:
intptr_t ip = ...; printf( "ip =%zd\n"、ip);
%p
は、プラットフォーム上のポインターと同じサイズの符号なし整数として定義されているため、%x
はuintptr_t
の代わりとして機能するはずです。
編集:残念ながら、少なくとも私のコンパイラでは、変数を(void *)にキャストする必要があります。ただし、uintptr_tをポインタにキャストしても安全だと思います。