【发布时间】:2022-01-05 02:56:43
【问题描述】:
我必须做这个练习:
“在c中,创建一个函数,在文件中打印(文件必须在“wb”中打开)一个数字(以10为底)”。
练习只给出了函数的声明 “extern bool write_integer(const char 文件名, int i);” 问题是我无法在“const char 文件名”字段中传递文件,因为 const char* 与 FILE* 类型不兼容。我错了吗?
因此,我认为这个练习的问题在于这部分:传递给一个函数 非常量 char* 值。但是,我不能简单地写(主要): const char *f;然后 FILE *f = fopen... 因为这会是类型重定义错误。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
bool write_integer(const char* filename, int i) {
FILE* f = fopen(filename, "wb");
if (f == NULL) {
return false;
}
fprintf(f, "%d", i);
fclose(f);
return true;
}
int main(void) {
FILE* f = fopen("file.txt", "w");
if (f == NULL) {
return NULL;
}
write_integer(f, 48);
fclose(f);
return 0;
}
【问题讨论】:
-
你为什么要首先将文件传递给该函数?
-
您不能将“FILE*”类型的“f”传递给函数 write_integer。只需传递 char 数组类型的文件名。此外,您要重新打开文件两次。
-
可以将函数改为
write_integer(FILE* f, int i),不要在函数内再次调用fopen。 -
所以
int main(void) {write_integer("file.txt", 48); return 0;}将完成这项工作。 -
是的,您可以在 C 中传递指针。您在 C 中并不完全具有“按引用传递”。目前尚不清楚该练习在教什么。也许练习是关于学习
extern和传递指针。
标签: c file pass-by-reference