填充char *数组时访问冲突

时间:2013-09-09 20:14:11

标签: c access-violation

我在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--)

我收到“访问冲突”错误。我不知道为什么会这样,所以我在寻求你的帮助。提前谢谢。

2 个答案:

答案 0 :(得分:3)

大小为n的C中的数组从0到n - 1.所以你的循环应该是

for (i=n-1;i>=0;i--)

您收到错误,因为您尝试访问该数组范围之外的内存。

答案 1 :(得分:2)

使用%s读取字符串时,不应传递字符串的地址,而只是传递字符串:scanf("%s%f",string,&k[i]);