int n;
scanf("%d",&n);
int *score;
score=(int *)malloc(sizeof(int)*n);
int i;
for (i=0;i<n;i++)
{
    scanf("%d",sizeof(int)*i+score);
}
printf("ok");

在上面的代码中,我得到一个错误,但是当我注释最后一行printf时,程序运行正常。
怎么了??
(我想在不使用数组的情况下给用户n个数字)

最佳答案

score + i形式的指针运算已经以sizeof(*score)的倍数完成。所以当你写score + i * sizeof(int)时,你会加倍地乘以项目的大小。你的触角超出了缓冲区的界限。
简单地写为score + i,或者如果你坚持自己做乘法,一定要先转换成字符指针类型:

(int*)((char*)score + i * sizeof(int))

哦,还有don't cast the result of malloc。C不需要它,而且它有点不规则。

10-08 08:19
查看更多