1

intをconstCHAR*にキャストして、変数のアドレスを表示するメッセージボックスを取得しようとしています。現在の機能不全の試みは次のようになります。

#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);

現在の問題は、単にキャストthatvalueしてconst char*いる、つまり、値を取得して、文字列(Cスタイルなど)ではなくポインタintに変換していることです。ポインタが無効なジャンクメモリを指しているため、メッセージボックスにジャンクが印刷されます。これは、クラッシュしないという不幸な奇跡です。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

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 に答える
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 に答える