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

时间:2015-02-11 00:42:05

标签: c++

我在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
  • A char[6]
  • A long

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

据我所知,long如果我将其解释为char,并且enum只是一个数字,那么{{1}}将无法正确打印,但无论如何我应该能够将它们解释为字符......如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:4)

表达式

*(int*)(data+i)

char*形成的data+i指针转换为int*,然后解除引用。这会将sizeof(int) char - 值作为int访问,除了它是未定义的行为,因此它可能真的做任何事情。特别是在数组的末尾。

如果您对输出数值感兴趣,请执行

+data[i]

char值提升为int