如何将变量的内容存储到const char *?

时间:2011-04-26 12:17:36

标签: c++

我有一个指针或变量存储地址,如0xb72b218现在我必须将此值存储到const char*。我怎么能存储它。提前致谢。 我试过以下: 假设我有一个指针变量“ptr”,其中包含0xb72b218

ostringstream oss;
oss << ptr;
string buf = oss.str();
const char* value = buf.c_str();

但是任何人都知道简单的方法会更复杂。

3 个答案:

答案 0 :(得分:2)

嗯......如果你真的想要字符串中某些东西的地址,那就行了:

#include <stdio.h>
#include <iostream>

int main(){
  char buf[30];
  void* ptr = /*your pointer here*/;
  snprintf(buf,sizeof(buf),"%p",ptr);

  std::cout << "pointer as string: " << buf << "\n";
  std::cout << "pointer as value: " << ptr << "\n";
}

或者,如果你不喜欢魔术数字,并希望你的代码能够工作,即使256bit指针不再是特殊的,试试这个:

#include <limits>  // for numeric_limits<T>
#include <stdint.h>  // for intptr_t
#include <stdio.h>  // for snprintf
#include <iostream>

int main(){
  int i;
  int* ptr = &i; // replace with your pointer
  const int N = std::numeric_limits<intptr_t>::digits;
  char buf[N+1]; // +1 for '\0' terminator
  snprintf(buf,N,"%p",ptr);

  std::cout << "pointer as string: " << buf << "\n";
  std::cout << "pointer as value: " << static_cast<void*>(ptr) << "\n";
}

Example on Ideone

答案 1 :(得分:0)

好的,可能必须有一些额外的参数告诉函数实际传递的是什么类型的数据,但你可以这样做:

extern void afunc(const char *p, int type);

int value = 1234;
afunc((const char *)&value, TYPE_INT);

答案 2 :(得分:0)

你看过const_cast了吗?它是一种在C ++中从变量中添加/删除常量的方法。看看here