我试图计算此文件中每行的平均值:
alpha 94 86 72 83 beta 83 65 98 54 charlie 69 70 59 43
代码是这样的:
#include "stdio.h" #include "stdlib.h" #include "math.h" #include "string.h" int main() { char *n,*p; char line[150]; char line1[149]; int average=0,sum=0,inte=0,i=0,a=0,b=0,c=0,d=0,g; FILE *fp,*des; char *array[5],*array2[5]; fp=fopen("score.txt","r"); des=fopen("avarage.txt","w+"); int num1[3]={0,0,0}; while (1) { if (fgets(line,150, fp) == NULL) break; int i=0; memcpy( line1, &line[0], strlen(line)-1 ); array[0] = strtok(line1," "); while(array[i]!=NULL) { array[i++] = p; p=strtok(NULL," "); inte=atoi(p); num1[i]+=inte; } } fprintf(des,"%d\n",(num1[0]+num1[1]+num1[2]+num1[3])/4); fclose(fp); fclose(des); return 0;
}
我认为这个程序很好。但是当我执行它时,它会显示Segmentation fault。在fprintf(des,"%d\n",(num1[0]+num1[1]+num1[2]+num1[3])/4);
之前,一切都很好。有人能指出这个问题吗?
答案 0 :(得分:0)
我认为至少你应该检查指针des和fp,如果其中一个是NULL,你肯定会得到一个SEG FAULT。
要找出确切的原因,请使用printf()设置检查点,或使用调试器。
答案 1 :(得分:0)
由于这似乎可能是家庭作业,我不会准确地说出我认为问题所在。但我会指出一些你似乎没有考虑到的事实:
1 - 字符串函数如strtok()期望字符串由空字节
终止2 - memcpy()不是字符串函数,只是将字节从一个位置复制到另一个位置