Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从地址获取字符串?_C++ - Fatal编程技术网

C++ 如何从地址获取字符串?

C++ 如何从地址获取字符串?,c++,C++,我有一个包含地址的ULONG值 地址基本上是字符串(以空字符结尾的wchar\u t数组) 我想找回那个字符串 最好的方法是什么?string&s=*重新解释您的角色(您的角色); string& s = *reinterpret_cast<string*>(your_ulong); 如果“基本上是字符串”的意思是指向std::string类实例的指针,那么他的答案是正确的。如果您的意思是指向C字符串的指针(我怀疑更可能是这样),那么您需要: char *s = reint

我有一个包含地址的ULONG值

地址基本上是字符串(以空字符结尾的wchar\u t数组)

我想找回那个字符串

最好的方法是什么?

string&s=*重新解释您的角色(您的角色);
string& s = *reinterpret_cast<string*>(your_ulong);
如果“基本上是字符串”的意思是指向
std::string
类实例的指针,那么他的答案是正确的。如果您的意思是指向C字符串的指针(我怀疑更可能是这样),那么您需要:

char *s = reinterpret_cast<char *>(your_ulong);
char*s=reinterpret\u cast(你的长);
或者,在您的情况下:

whcar_t *s = reinterpret_cast<wchar_t *>(your_ulong);
whcar\u t*s=重新解释演员阵容(你的角色);
还要注意的是,您不能安全地将指针存储在任何旧的整数类型中。我可以制作一个32位
long
类型和64位指针类型的编译器。如果您的编译器支持它,以整数形式存储指针的正确方法是使用
stdint.h
types
intptr\t
uintpr\t
,这两种类型(由C99标准)保证足够大以存储指针类型


<>但是,C99不是C++的一部分,许多C++编译器(Read:微软)可能不提供这种功能(因为谁需要编写可移植代码?)。幸运的是,
stdint.h
非常有用,有了解决办法,可以在互联网上轻松找到与旧编译器兼容的
stdint.h
的可移植(免费)实现。

当然,我可能会使用C风格的强制转换,但那是因为我本质上是一个C程序员。出于实际目的,
size\u t
与指针一样大,如果任何整数类型都是的话。@Potatoswatter-出于实际目的,是的,它会的,但是我刚才问了一个问题(),关于这是一个混乱还是一个逻辑要求。事实证明,对于完全的可移植性,
size\u t
是不够的。与其说是现在,还不如说是过去,甚至可能是未来(因为谁能预测呢?)。