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))
哦,不要抛出malloc的结果。C不需要它,并且有点单调。
scanf("%d",sizeof(int)*i+score);
Pointer Arithmetic使用指针类型,因此您要在得分后移动到sizeof(int) i sizeof(int)字节,而只需使用分数 i。