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不需要它,而且它有点不规则。