C++ - 无法打印字符指针的目标

C++ - Can't print target of a char pointer

本文关键字:指针 目标 字符 打印 C++      更新时间:2023-10-16

我在C++中有一个方法,它接收char * data作为参数,如下所示:

bool Whatever::method(char * data) { ... }

现在,我想打印该数组的内容。如果我尝试:

for (int i = 0...) {
    cout << *(data+i) << endl;
}

它将只打印空格。没有垃圾,只有空白。但是,如果我强制转换为int *,然后取消引用,它会起作用(当然,它会将值打印为整数):

for (int i = 0...) {
    cout << *(int*)(data+i) << endl;
}

我在这里做错了什么?谢谢

编辑:

数组的内容如下:

  • enum
  • char[6]
  • long

我得到的是每个char的一个空格。即使我删除for循环并尝试类似cout << *data << endl;(应该打印第一个字符)的操作,它仍然会打印空白。

我知道,如果我将long解释为char,它将不会被正确打印,而enum毕竟只是一个数字,但无论如何,我应该能够将它们解释为字符。。。如果我错了,请纠正我。

表达式

*(int*)(data+i)

将由data+i形成的char*指针投射到int*并解引用。这将作为int访问sizeof(int)char-值,除了它是Undefined Behavior,所以它可能真的会做任何事情。特别是在数组的末尾。

如果你对输出数值感兴趣,可以改为

+data[i]

这将CCD_ 19的值提升为CCD_。