我有我的函数dumpArray();这样做:
void dumpArray(void)
{
while(p <= i)
{
printf("%i:", packet[p].source);
printf("%i:", packet[p].dest);
printf("%i:", packet[p].type);
printf("%i\n", packet[p].port);
p++;
}
}
我正试图将其传递给fprintf();就这样:
void fWrite(void)
{
char fileName[30] = { '\0' };
printf("Please specify a filename: ");
scanf("%s", fileName) ;
FILE *txtFile;
txtFile = fopen(fileName, "w");
if (txtFile == NULL)
{
printf("Can't open file!");
exit(1);
}
else fprintf(txtFile, dumpArray());
}
我正在尝试写dumpArray()的结果;进入档案。
任何人都可以看到我出错的地方,并指出我正确的方向。
答案 0 :(得分:3)
您可以根据传入的流来重写dumparray以写入stdout或文本文件。
因此,您可以将所有printf调用更改为fprintf,并将该流作为第一个参数传递。
答案 1 :(得分:2)
您的第一个函数是将其输出转储到stdout
并且不返回任何内容,因此它不会导致fprintf
可以捕获的输出。
您需要弄清楚所有这些printf
字符串的长度,并为sprintf
分配适当的内存量,然后返回字符串。
或者,您应该将一个函数指针传递给dumpArray
指向printf
的函数,该函数将改为写入文件:
void printfLike(format, data) {
fprintf(fileConst, format, data);
}
...
dumpArray(printfLike);
那种性质。
答案 2 :(得分:1)
fprintf的函数声明声明它需要一些char *参数但dumpArray()没有返回char *。
int fprintf(FILE * stream,const char * format,...);
如果要在dumpArray()中写入文件,可以将txtFile传递给dumpArray()并在函数内部执行fprintf。或者,您可以先在缓冲区(例如char [])中收集要写入文件的所有数据,然后再将其写入。
例如:
void dumpArray(FILE * txtFile)
{
while(p <= i)
{
fprintf(txtFile, packet[p].source);
fprintf(txtFile, packet[p].dest);
fprintf(txtFile, packet[p].type);
fprintf(txtFile, packet[p].port);
fprintf(txtFile, "\n");
p++;
}
}
void fWrite(void)
{
char fileName[30] = { '\0' };
printf("Please specify a filename: ");
scanf("%s", fileName) ;
FILE *txtFile;
txtFile = fopen(fileName, "w");
if (txtFile == NULL)
{
printf("Can't open file!");
exit(1);
}
else dumpArray(txtFile);
答案 3 :(得分:0)
你从哪里开始?
请查看fprintf
和printf
的页面。
将dumpArray
更改为重新组合字符数组。什么是p
?
对于初学者来说 - 重新阅读C上的教科书以及C
上的手册页