C 子程序中的fprintf()
当我试图在子程序中写入文件时,我被卡住了C 子程序中的fprintf(),c,function,file-io,C,Function,File Io,当我试图在子程序中写入文件时,我被卡住了 void new_page(float *a, float *b, float *c, int *d){ fprintf(results,"\nPage Totals: %f\t%f\t%f\t%d", *a,*b,*c,*d); } 我收到警告说 Warning: incompatible implicit declaration of built-in function 'fprinf' [enabled by default] 错误:“
void new_page(float *a, float *b, float *c, int *d){
fprintf(results,"\nPage Totals: %f\t%f\t%f\t%d", *a,*b,*c,*d);
}
我收到警告说
Warning: incompatible implicit declaration of built-in function 'fprinf' [enabled by default]
错误:“结果”未声明(首次在此函数中使用)
在main中,fprintf工作得很好,只是当涉及到子程序/函数时,它就不工作了。据我所知,它认为结果是未声明的,所以我必须传递文件的名称或位置才能使其正常工作吗?这里有多个解决方案
除非
结果
是全局的,否则它是未定义的
从外观上看,您已经在main中以results
的形式打开了一个文件(流)。如果是的话,它只存在于main的范围内
将其传递给函数。不要建议将其全球化
它看起来像:
void new_page(FILE *results, float *a, float *b, float *c, int *d){
fprintf(results,"\nPage Totals: %f\t%f\t%f\t%d", *a,*b,*c,*d);
}
还有,;如果您在一个单独的文件中有此函数,那么
main()
,正如您所说的fprintf
工作-您还必须在该文件中包含stdio.h
编辑:听起来你在做一些错误的功能签名和原型等 举个简单的例子(不需要对fopen等进行检查):
#包括
void foo(文件*fp)
{
fprintf(fp,“HELLO\n”);
}
内部主(空)
{
文件*fp;
fp=fopen(“blabla”,“w”);
foo(fp);
fclose(fp);
返回0;
}
还有,;你说你的编译器没有抱怨。您是否使用了广泛的警告?如果不是,你应该。Ie GCC:
$gcc-Wall-Wextra-pedantic-o my_prog my_source.c
我通常还会添加-std=c89
,或者如果需要,添加-std=c99
然后用valgrind运行它:
$valgrind./my_prog
这两个步骤将为您提供许多提示和线索,说明哪里可能出错。要解决
fprintf
警告,您需要添加
#include <stdio.h>
#包括
靠近源文件的顶部
结果
误差不同;您可以将其设置为全局,也可以将其作为参数传递给新页面
函数
将变量设置为全局变量(即,在任何函数之外定义,包括
main
)通常是不好的风格,但是如果结果
是一个将在整个程序中使用的文件*
,将其设置为全局并不是不合理的。因此,要传递它,我只需在参数列表中传递一个指向该文件的指针,它应该会看到它已定义?哦,它不是全局的,我没有使用任何全局变量。是的,有点。当你像那样传递它时,你告诉函数;“您好,这是一个地址,在该地址您将找到一个文件流”。该函数位于单独的文件中。我会再试一次,看看交易是什么:我已经安排好了。对于函数原型,我必须使用FILE**,而在实际函数中,我只使用FILE*。我想既然文件已经被指向了,我不得不使用双指针。它是C,所以谁知道会发生什么,仅仅因为它没有给出错误并不意味着它会工作haharns out It not work:/编译器不再抱怨,因为参数匹配,但它不会打印到文件中。我放了一个printf在屏幕上显示im在函数中,它打印出我的文本。至于全局变量,我根本不允许在程序中使用任何变量。就像你说它的风格很差,我的老师说不赞成使用globals。@塞吉奥:那么你需要把它作为一个参数来传递。关于警告。。你是说fprintf()
?错误:在哪里声明“结果”?你能提供更多的代码吗?
#include <stdio.h>