是否可以在C++中获取 CHAR 的有效十六进制地址?
Is it possible to get the valid hex address of CHAR in C++?
我正在尝试获取 CHARA4和b5的有效内存地址,但是当我尝试使用十六进制编辑器访问该地址时,它没有读取编译后我已经在控制台输出中获得的地址。十六进制编辑器正在验证该地址是否无效地址。
我的代码:
#include <iostream>
using namespace std;
main ()
{
{ //INT
cout << "INT" << 'n';
int a = 2, b = 3;
cout << "Result: " << "for " << "int a " << "= " << a << 'n';
cout << "Result: " << "for " << "int a " << "= " << a << " " << "at " << "address " << &a << 'n';
cout << "Result: " << "for " << "int b " << "= " << b << 'n';
cout << "Result: " << "for " << "int b " << "= " << b << " " << "at " << "address " << &b << 'n';
cout << "-----------------------------------------" << 'n';
}
{
//SHORT
cout << "SHORT" << 'n';
short a = 2, b = 3;
cout << "Result: " << "for " << "short a " << "= " << a << 'n';
cout << "Result: " << "for " << "short a " << "= " << a << " " << "at " << "address " << &a << 'n';
cout << "Result: " << "for " << "short b " << "= " << b << 'n';
cout << "Result: " << "for " << "short b " << "= " << b << " " << "at " << "address " << &b << 'n';
cout << "-----------------------------------------" << 'n';
}
{
//FLOAT
cout << "FLOAT" << 'n';
float a = 2, b = 3.1;
cout << "Result: " << "for " << "float a " << "= " << a << 'n';
cout << "Result: " << "for " << "float a " << "= " << a << " " << "at " << "address " << &a << 'n';
cout << "Result: " << "for " << "float b " << "= " << b << 'n';
cout << "Result: " << "for " << "float b " << "= " << b << " " << "at " << "address " << &b << 'n';
cout << "-----------------------------------------" << 'n';
}
{
//DOUBLE
cout << "DOUBLE" << 'n';
double a = 20, b = 30.1;
cout << "Result: " << "for " << "double a " << "= " << a << 'n';
cout << "Result: " << "for " << "double a " << "= " << a << " " << "at " << "address " << &a << 'n';
cout << "Result: " << "for " << "double b " << "= " << b << 'n';
cout << "Result: " << "for " << "double b " << "= " << b << " " << "at " << "address " << &b << 'n';
cout << "-----------------------------------------" << 'n';
}
{
//CHAR
cout << "CHAR" << 'n';
char A4 = 'A' , b5 = 'B' ;
cout << "Result: " << "for " << "Char A4 " << "= " << A4 << 'n';
cout << "Result: " << "for " << "Char A4 " << "= " << A4 << " " << "at " << "address " << &A4 << 'n';
cout << "Result: " << "for " << "Char b5 " << "= " << b5 << 'n';
cout << "Result: " << "for " << "Char b5 " << "= " << b5 << " " << "at " << "address " << &b5 << 'n';
cout << "-----------------------------------------" << 'n';
}
}
查看流operator<<
的重载列表。用于char const*
的那个假定该地址处有一个以零结尾的字符串。你想要的是void const*
的过载.对于其他类型的 pointe,该转换由编译器隐式完成,char
您需要自己显式地进行转换:
cout << static_cast<void const*>(&b5) << endl;
char A4 = 'A';
cout << &A4;
正在打印char*
,当您打印char*
时,标准库会尝试打印以 null 结尾的字符串。由于您只有一个字符,因此没有空终止符,因此在标准库碰巧找到空字节之前会打印垃圾,这是未定义的行为。
要打印指针而不是字符串,您需要转换为不同的指针类型,例如:
char A4 = 'A';
cout << static_cast<void*>(&A4);
相关文章:
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 是否可以在C++中获取 CHAR 的有效十六进制地址?
- 有效地将数据加载到 std::vector 中<char>
- 将文本文件读取为 const char* 有时有效,有时无效
- 字符串或const char*,更有效地用作构造函数参数
- 验证用户输入是否有效 [从 'char' 到 'char*' 的转换无效]
- 如何在C/C 或CUDA中有效地通过对角有效地翻转char阵列
- C/C++:将 char[] 转换为 int 失败,无符号 char[] 到 int 有效,为什么
- 将字符串转换为 char 指针可以指向的 char 数组/值的最有效方法是什么
- 有效的迭代器范围从堆栈上的char
- 'int main(int argc, char* argv<::>)' 如何成为 main 的有效签名?
- 为什么从字符串常量到"char*"的转换在 C 中有效,但在C++中无效
- reinterpret_cast<char *> 是reinterpret_cast的唯一有效用法吗?
- 为什么const char*转换为std::string有效
- 为什么"const int" "int"转换有效,但"const char[]"到"char *"不起作用
- 将文件的一部分读取到 std::vector 中的有效方法<char>?
- 最有效的const-char*比较是不区分大小写的
- 获取char输入,检查它是否有效,如果无效,清除整个输入
- 为什么 std::string{ "const char ptr" } 有效?
- 将 std::vector 截断<char>为长度 N - 以释放内存的有效方法