用vs跑程序时遇到这样一个报错,相同的程序在别人那就能跑,在我这就会报错,想请问一下这个该怎么改
#pragma warning(disable:4996);
#include
#define SIZE 39208361
int main(void)
{
//一、读取数据
FILE *fp;
int i = 0, j = 0, k = 0;
fp = fopen("C:\\Users\\LEGION\\Desktop\\5nweights.txt", "r");//以只读形式打开D盘的test.bin文件,文件地址储存在指针fp中
if (fp == NULL)
{
printf("failed.\n");
return 1;
}
unsigned char a[SIZE];//unsigned char型占一个字节
int b[50000];
float c[5000];
fread(a, 1, SIZE, fp);//第一维是列数,第二维是行数
//将fp指针指向的文件写入image数组中,文件中元素的个数为SIZE*SIZE*3,每个元素占1个字节
fclose(fp);
/*
for (i = 0; i < 200; i++)
printf("%c", a[i]);
printf(" %c", a[199]);*/
for (i = 0; i < 39208361; i++)
{
while (a[i] >= '0' && a[i] <= '9' || a[i] == '.' || a[i] == '-')
{
b[j] = a[i] - '0';
//printf("%d",b[j]);
j++;
//printf("%c", a[i]);
i++;
}
//printf("j = %d\n", j);
switch (j) {
case 0:
break;
case 1:
if (b[0] == -2)//排除第一个是.
break;
c[k] = b[0]; //printf("c = %f\n", c[k]);
k++;
break;
case 2:
c[k] = 10 * b[0] + b[1]; //printf("c = %f\n", c[k]);
k++; break;
case 3:
if (b[0] == -2)//排除第一个是.
break;
c[k] = 100 * b[0] + 10 * b[1] + b[2]; //printf("c = %f\n", c[k]);
k++; break;
default:
if (b[1] == -3)//排除很多-的情况
break;
if (b[0] == -2)//排除第一个是.
break;
if (b[0] == -3)//有负号
//for (l = 6; l < j; l++)
{
c[k] = -(b[1] + 0.1*b[3] + 0.01*b[4] + 0.001*b[5] + 0.0001*b[6] + 0.00001*b[7] + 0.000001*b[8]);//小数点后六位
//printf("%f\n",c[k]);
}
else {
c[k] = b[0] + 0.1* b[2] + 0.01*b[3] + 0.001*b[4] + 0.0001*b[5] + 0.00001*b[6] + 0.000001*b[7] + 0.0000001*b[8];//小数点后七位
//printf("%f\n",c[k]);
}
k++;
break;
}
j = 0;
}
for (i = 0; i < 1733; i++)
{
printf("%f\n", c[i]);
}
}
是不是数组越界了,检查下那一行所有的数组的下标
都属于线性表,都是线性结构
顺序表
优点:支持随机存取,存储密度高
缺点:大片连续空间分配不方便,改变容量不方便
链表
优点:离散的小空间分配方便,改变容量方便
缺点:不可随机存取,存储密度低