1

我试图通过将 int 转换为 const CHAR* 来获取消息框以显示变量的地址,我当前的功能失调尝试如下所示:

#include <cstdlib>
#include <iostream>
#include <windows.h>

int main()
{
 int *ip;
 int pointervalue = 1337;
 int thatvalue = 1;
 ip = &pointervalue;
 thatvalue = (int)ip;
 std::cout<<thatvalue<<std::endl;
 MessageBox (NULL, (const char*)thatvalue, NULL, NULL);
 return 0;
}

dos 框打印 2293616,消息框打印“9|”

4

4 回答 4

5

如果你使用 C++11,你也可以使用to_string()

MessageBox (NULL, std::to_string(thatvalue).c_str(), NULL, NULL);

您当前的问题是您只是转换thatvalueconst char*,或者换句话说,获取int值并将其转换为指针,而不是字符串(C 样式或其他)。您在消息框中打印了垃圾,因为const char*指针指向无效的垃圾内存,而且它没有崩溃是一个不幸的奇迹。

于 2012-12-31T20:16:27.257 回答
3

尝试改用 stringstream(包括 sstream)

int *ip;
int pointervalue = 1337;
int thatvalue = 1;
ip = &pointervalue;    
stringstream ss;
ss << hex << ip;
MessageBox (NULL, ss.str().c_str(), NULL, NULL);
于 2012-12-31T20:12:10.290 回答
1

简单的铸造不会做这个工作。

看看 itoa 函数:http ://www.cplusplus.com/reference/cstdlib/itoa/

/* itoa example */
#include <stdio.h>
#include <stdlib.h>

int main ()
{
  int i;
  char buffer [33];
  printf ("Enter a number: ");
  scanf ("%d",&i);
  itoa (i,buffer,10);
  printf ("decimal: %s\n",buffer);
  itoa (i,buffer,16);
  printf ("hexadecimal: %s\n",buffer);
  itoa (i,buffer,2);
  printf ("binary: %s\n",buffer);
  return 0;
}
于 2012-12-31T20:15:25.523 回答
1

转换为 const char * 不起作用,因为它会尝试将 int 解释为指针。

如果你想避免流,你可以像这样使用 snprintf

char buffer[20];
snprintf(buffer,20,"%d",thatValue);
MessageBox (NULL, (const char*)buffer, NULL, NULL);
于 2012-12-31T20:21:06.830 回答