我在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
只是一个数字,那么{{1}}将无法正确打印,但无论如何我应该能够将它们解释为字符......如果我错了,请纠正我。
答案 0 :(得分:4)
表达式
*(int*)(data+i)
将char*
形成的data+i
指针转换为int*
,然后解除引用。这会将sizeof(int)
char
- 值作为int
访问,除了它是未定义的行为,因此它可能真的做任何事情。特别是在数组的末尾。
如果您对输出数值感兴趣,请执行
+data[i]
将char
值提升为int
。