c语言 出现空指针赋值怎么回事???请高手帮忙看下。

#include<stdio.h>
readTxt1()
{
FILE *fp;
int i;
int zts[35];
fp=fopen("zhuangtai.txt","r");
for(i=0;i<35;i++)
fscanf(fp,"%d",&zts[i]);
fclose(fp);
}
readTxt2()
{
FILE *fp1;
int i;
int point1[35];
fp1=fopen("jiedian1.txt","r");
for(i=0;i<35;i++)
fscanf(fp1,"%d",&point1[i]);
fclose(fp1);
}
readTxt3()
{
FILE *fp2;
int i;
int point2[35];
fp2=fopen("jiedian2.txt","r");
for(i=0;i<35;i++)
fscanf(fp2,"%d",&point2[i]);
fclose(fp2);
}
readTxt4()
{
FILE *fp3;
int i;
float x1[35];
fp3=fopen("zhxdiankang.txt","r");
for(i=0;i<35;i++)
fscanf(fp3,"%f",&x1[i]);
fclose(fp3);
}
void main()
{
int I,J,K,lines,points,ztstime,nYIJ,K0,K1,K2,J1,J3;
int zts[35];
int point1[35];
int point2[35];
float x1[35];
float YDJ12[22],YDJ22[22];
int YFDJ12MHGS[22];
float YDJ122[22],YFDJ122[70],BGZYIJ2[70];
int BGZYIJHH[70],BGZYIJLH[70],YFDJ12LH[70];
float X;
float Yline2;
readTxt1();
readTxt2();
readTxt3();
readTxt4();
for (I=0;I<=21;I++)
{
YDJ12[I]=0;
}
nYIJ=0;
for (K=0;K<35;K++)
{
ztstime=zts[K];
if(ztstime==0) continue;
I=point1[K];
J=point2[K];
X=x1[K];
if(X==0.0) continue;
Yline2=-1.0/X;
if(ztstime==1||ztstime==2||ztstime==3)
{
YDJ12[I-1]=YDJ12[I-1]+Yline2;YDJ12[J-1]=YDJ12[J-1]+Yline2;
nYIJ=nYIJ+1,BGZYIJ2[nYIJ]=-Yline2;BGZYIJHH[nYIJ]=I;BGZYIJLH[nYIJ]=J;
nYIJ=nYIJ+1;BGZYIJ2[nYIJ]=-Yline2;BGZYIJHH[nYIJ]=J;BGZYIJLH[nYIJ]=I;
}
else
YDJ12[I-1]=YDJ12[I-1]+Yline2;
continue;

}
for(I=0;I<=21;I++)
printf(" YDJ12[I]=%f",YDJ12[I]);
J=0;K0=0;
for(I=0;I<=21;I++)
{
J1=0;
for(K=0;K<=nYIJ-1;K++)
{
if(BGZYIJHH[K]!=I)
continue;
J3=BGZYIJLH[K];
for(K1=0;K1<=J1-1;K1++)
{
K2=K0+K1;
if(J3==YFDJ12LH[K2]) break;
}
if(K1>=J1)
{
J=J+1;YFDJ122[J]=BGZYIJ2[K];YFDJ12LH[J]=J3;J1=J1+1;continue;
}
else
{
YFDJ122[K2]=YFDJ122[K2]+BGZYIJ2[K];
continue;
}
}
YFDJ12MHGS[I]=J1;K0=K0+J1;
}
for(I=0;I<70;I++)
printf(" %f",YFDJ122[I]);
for(I=0;I<70;I++)
printf(" %d",YFDJ12LH[I]);
for(I=0;I<22;I++)
printf(" %d",YFDJ12MHGS[I]);
}


我是想调用这四个函数readTxt1();readTxt2();readTxt3();readTxt4();实现分别从文本文件zhuangtai.txt;jiedian1.txt;jiedian2.txt;zhxdiankang.txt给zts[35];point1[35];point2[35];x1[35]赋值,

我C语言不是很精,在做毕设,希望高手可以帮帮我,先谢过各位大侠了。

是编译器报的空指针赋值吧?主要原因:作者没有搞清楚C中的全局变量和局部变量的问题。
1。zts[35];point1[35];point2[35];x1[35]这四个数组在main()中有,在四个子函数中有,各是各的,互不干涉,所以main()中的这四个数组始终没有被赋值过,空指针指的就是这个吧。
2。应该把这四个数组的首地址作为四个read()的参数传过去,就可以实现:“在子函数中赋值,在main函数中使用” 的设计目的了。看程序,感觉作者就是这个目的吧。
3。 魔尊8 说的有一定道理,这四个read确实没有起到应有的作用。加上数组首地址做参数就可以了。或者把这四个数组做成全局变量也行啊。
4。作者有时间的话还是应该好好看看C语言的书啊。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-10
所谓的 空指针赋值
是不是
fp=fopen("zhuangtai.txt","r");

fopen返回的是指针,把文件的地址传给了fp
第2个回答  2010-05-10
readTxt1();
readTxt2();
readTxt3();
readTxt4();
没有仔细研究,不过首先我认为你这四个函数调用就有问题,根本就没有返回任何值,就跟没有调用一样。
相似回答