【发布时间】:2018-12-27 21:18:48
【问题描述】:
我有一个代码应该读取一个数组,将其写入二进制文件和文本文件,然后打印文件。但是,fprintf 函数返回一个错误,我不知道为什么。 这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *f,*b;
if (f=fopen("fis.txt","w+")==NULL) {
printf ("Error\n");
exit(1);
}
if(b=fopen("binar.txt","w+b")==NULL) {
printf ("Error\n");
exit(1);
}
float *v; int n;
char s[1000];
scanf("%d",&n);
v=malloc(n*sizeof(float));
int x,y;
for (int i=0;i<=n;i++) {
scanf("%f",&v[i]);
printf("%f",v[i]);
x=fprintf(f,"%f",v[i]);
if (x<0) printf("err\n");
y=fprintf(b,"%f",v[i]);
if (y<0) printf ("err2\n");
}
fgets(s,sizeof(s),f);
puts(s);
printf("\n");
fgets(s,sizeof(s),b);
puts(s);
printf("\n");
free(v);
fclose(f);
fclose(b);
}
【问题讨论】:
-
在您的循环中关闭 1 个错误。试图扫描到
v[0],v[1],...v[n-1],v[n];但v[n]不存在。 -
int i=0;i<=n;i++应该是int i=0;i<n;i++从数组中写入 1 个值 -
尝试
perror打印错误原因(基于errno的值);大多数标准库函数在失败时设置errno。 -
谢谢。修改了还是不行
-
我强烈建议您在编译时启用所有警告,并将任何警告视为错误。我希望大多数编译器会警告分配错误。诚然,警告信息可能有点晦涩难懂,可能类似于“从整数到指针的转换”,但它至少会指出出现问题的行。在这种情况下,首先要做的就是删除任何你不确定的东西,这可能包括链接多个不带括号的运算符。