【问题标题】:How to convert %p to %d in cpp?如何在cpp中将%p转换为%d?
【发布时间】:2021-02-08 03:08:39
【问题描述】:

我有这个功能

VOID printip(void *ip, THREADID tid)
{ 
   PIN_GetLock(&pinLock, tid+1);
   fprintf(trace, "%d %p\n", tid, ip);
   fflush(trace);
   PIN_ReleaseLock(&pinLock);
}

指针ip以十六进制格式打印,但我想以整数格式打印。所以我尝试了以下-->

VOID printip(int *ip, THREADID tid)
{ 
   PIN_GetLock(&pinLock, tid+1);
   fprintf(trace, "%d %d\n", tid, ip);
   fflush(trace);
   PIN_ReleaseLock(&pinLock);
}

但它给了我这个错误。

请建议如何将其打印为整数?

【问题讨论】:

  • 请将错误信息以文字形式而非图片形式发布。
  • 刚投:(int)tid??
  • @kebs 图片有什么问题?
  • 顺便说一句,问题解决了。我刚刚使用了“long int x=*((long int *) &ip)”并打印了 %d of x。
  • @RohanShaw 这是处理此问题的错误方法。这将在sizeof(long int) < sizeof(int*) 的系统上失败。请改用reinterpret_cast<uintptr_t>(ip)。

标签: c++ pointers hex


【解决方案1】:

#include <cinttypes> 然后将fixed width (decimal) format 用于uintptr_t。

  printf("%d %" PRIuPTR "\n", tid, (uintptr_t)ip);

当指针与整数大小不同时,使用"%d" 并将指针转换为int 将失败,例如在x86_64 上的64 位编译中使用(大多数)编译器sizeof(int) == 4 但sizeof(void *) == 8。

【讨论】:

  • Okkk.. 谢谢。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 2021-05-16
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多