【发布时间】:2012-08-07 23:35:45
【问题描述】:
我正在编写一些代码来获取 c 中堆栈的十六进制转储。当我在 ubuntu 中使用 gcc 编译它时,我在以下行中不断收到编译错误,但是它在 windows 中的 gcc 下编译得很好。
char buffer[10];
for (int i=0;i<20;i++)
printf("0x%lx => 0x%lx\n", &(buffer[i]), ((long *)buffer)[i]);
这是编译器给出的信息。
警告:格式“%lx”需要类型“long unsigned int”,但参数 2 的类型为“char *”
如果我做错了什么,有人可以告诉我吗?
【问题讨论】:
-
编译器几乎可以告诉你你做错了什么。而且一切都是未定义的行为:-(
-
你也在访问未分配的内存,尤其是作为
long指针访问缓冲区。 -
@KerrekSB,感谢您的帮助。
标签: c pointers casting dereference