【发布时间】:2014-01-15 09:14:14
【问题描述】:
代码如下:
char s[8];
int i = 0;
void **p = &s;
for (; i < 8; ++i) {
putchar( ((char*)(*p))[i] );
}
上面的代码可以工作,但给出了一些垃圾字符。所以我所做的只是初始化s[8]:
char s[8] = {0};
然后是分段错误,但是如果我使用VC++编译和运行它,它工作正常。奇怪的。有人能解释一下吗?谢谢!
更新: 很多人说上面的代码很愚蠢......这个更新是给你的。什么原创 代码如下:
static void*
copy_and_move(void **dst, int dsz, const void **src, int ssz) {
const int sz = ssz > dsz ? dsz : ssz;
memcpy(*dst, *src, sz);
return *dst + sz;
}
然后调用代码:
char d[10], s[8];
copy_and_move(&d, sizeof(char) * 10, &s, sizeof(char) * 8);
【问题讨论】:
-
你为什么要做
((char*)(*p))[i]而不是简单的s[i]? -
您的
*密钥是否粘滞?为什么要将字符投射到char *?为什么要将指针声明为指向指针的指针? -
我一直对那些写出这样表达方式的人感到惊讶,但当他们转身咬在臀部时却不知何故感到惊讶:-)
-
我简化了原始代码,所以,你看到了上面的愚蠢代码。你们都成功地错过了重点。
-
@user1786323 你应该阅读this。简而言之:
s == &s.
标签: c gcc segmentation-fault