【发布时间】:2021-11-24 20:10:24
【问题描述】:
您好,我练习 C 中的文件处理,并尝试编写有关删除 cmets 的代码。 我使用 main.c、functions.c 和 functions.h .
main.h
#include <stdio.h>
#include <stdlib.h>
#include "functions.c"
int main(void) {
FILE *in ,*out;
char c;
if ((in = fopen("input_file.c", "r")) == NULL ) {
printf("Error opening \"file1.txt\" for reading\n");
exit(1);
}
if ((out = fopen("input_file.nocmments.c","w")) == NULL ) {
printf("Error opening \"file2.txt\" for writing\n");
exit(2);
}
while((c = getc(in)) != EOF) {
if(c == '/') comment(c, in, out);
else if (c == '\'' || c == '\"') quotes(c, in, out);
else print(c, out);
}
fclose(in);
fclose(out);
return 0;
}
function.c(我只展示一部分,因为其他函数也存在同样的问题
int one_line(char ch, FILE* fpin, FILE* fpout) {
while ((ch = getc(fpin)) != '\n');
fputc(ch, fpout);
return ch, fpin, fpout; <-- error here
}
函数.h
int comment(char ch, FILE* fpin, FILE* fpout);
int one_line(char ch, FILE* fpin, FILE* fpout);
int multiline(char ch, FILE* fpin, FILE* fpout);
int quotes(char ch, FILE* fpin, FILE* fpout);
int print(char ch, FILE* fpout);
所以当我编译代码时,我会收到以下警告
returning ‘FILE *’ {aka ‘struct _IO_FILE *’} from a function with return type ‘int’ makes integer from pointer without a cast [-Wint-conversion]
我知道我无法返回 typedef,这就是我遇到以下问题的原因,但是如何将文件指针返回到我的主函数? (对不起,如果我的问题很愚蠢)
【问题讨论】:
-
你只能从 C 函数返回 一个 东西。看起来
fpin和fpout是输入。你为什么要退货? -
事实上,看起来你的函数根本不需要返回任何东西。
-
@Max 如果 OP 尝试创建一个最小的可重现示例并且具有相同问题的其他功能需要所描述的功能,我不会感到惊讶
-
@Max 这实际上是关键问题,谢谢
-
当你说“我明白我不能返回typedef”时,我怀疑你的意思是你认为你不能返回一个结构。
typedef是一个关键字,而不是类型类别,尽管有些人习惯使用它来定义结构类型的别名,但实际上它从来没有用于任何目的。无论如何,是的,您可以返回一个结构。唯一不能返回的类型是函数和数组,尽管你可以返回指向它们的指针。
标签: c file-handling