【发布时间】:2014-03-31 13:48:35
【问题描述】:
我有一个基本的 C 程序,我必须为个人软件流程作业执行该程序。我对C相当陌生,所以老实说,我看不出哪里出错了。请通读并告诉我我在做什么导致它崩溃?
我必须读入一个文件,并将值存储为一个数组。它没有编译错误,只是一个分段错误。
#include <stdio.h>
#define array_limit 100
int main (void)
{
FILE *ifp;
char *mode = "r";
ifp = fopen("samplepopulation.txt", mode);
if (ifp==NULL)
{
printf("cannot read file \n");
}
else
{
int i;
float sample;
float values[array_limit];
i = 0;
do
{
fscanf(ifp, "%f", &sample);
if (!feof(ifp))
{
values[i] = sample;
printf("%f \n", values[i]);
i++;
if (i>array_limit)
{
printf("File larger than allowed/n");
break;
}
}
else
{
printf("read complete");
}
} while (ifp!= EOF);
}
fclose(ifp);
return 0;
}
【问题讨论】:
-
你已经用 C 标签标记了这篇文章,但你没有在代码的开头声明变量。照顾这种事情......
-
@adripanico 这在 C 语言中非常好。欢迎来到 1999 年。
-
将
if(i > array_limit)更改为if(i >= array_limit) -
values 的元素为 0 到 99,因此会在索引为 100 时崩溃
-
@Lundin 编译器完全没问题。 C 规范从未允许这样做。
标签: c segmentation-fault coredump