web-dev-qa-db-ja.com

intptr_tおよびuintptr_tの文字列形式

32ビットと64ビットの両方のアーキテクチャで有効なintptr_tおよびuintptr_tの文字列形式は何ですか。

編集

warning: format ‘%x’ expects type ‘unsigned int’, but argument 2 has type "AAA"

これは、64ビットでは表示されるが32ビットでは表示されない警告です。

  intptr_t  AAA
31
thetna

これは、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);
46
ninjalj

「z」修飾子の使用を検討する必要があると思います。これは、size_tとssize_tに対応するすべてのものを変換します。また、(u)intptr_tでも機能することがわかりました。

例えば:

intptr_t ip = ...; printf( "ip =%zd\n"、ip);

3

%pは、プラットフォーム上のポインターと同じサイズの符号なし整数として定義されているため、%xuintptr_tの代わりとして機能するはずです。

編集:残念ながら、少なくとも私のコンパイラでは、変数を(void *)にキャストする必要があります。ただし、uintptr_tをポインタにキャストしても安全だと思います。

0
jjsimpso