我在c:
中写了一段代码const char *str[125000];
float k[125000];
long n;
char string[20];
int i;
scanf("%d",&n);
for (i=0;i<n;i++)
{
scanf("%s%f",&string,&k[i]);
p=p/k[i];
str[i]=_strdup(string);
}
此时一切都很完美。即使n = 100000,数组也会被填充;但是,如果我改变
for (i=0;i<n;i++)
到
for (i=n;i>0;i--)
我收到“访问冲突”错误。我不知道为什么会这样,所以我在寻求你的帮助。提前谢谢。
答案 0 :(得分:3)
大小为n的C中的数组从0到n - 1.所以你的循环应该是
for (i=n-1;i>=0;i--)
您收到错误,因为您尝试访问该数组范围之外的内存。
答案 1 :(得分:2)
使用%s
读取字符串时,不应传递字符串的地址,而只是传递字符串:scanf("%s%f",string,&k[i]);
。