0

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

我收到“访问冲突”错误。我不知道为什么会发生这种情况,所以我正在寻求您的帮助。提前致谢。

4

2 回答 2

3

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

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

您会收到一个错误,因为您试图访问超出该数组范围的内存。

于 2013-09-09T20:16:58.873 回答
2

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

于 2013-09-09T20:15:47.080 回答