我正在编程(实际上接近完成)一个CLI程序,用于测试用户的词汇量,或者他/她将要关注的任何问题和回答。
github上的完整资源:https://github.com/megamasha/Vocab-Tester
从文件加载并保存到文件是从main()之外的单独函数处理的。目前他们在同一个源文件中,但我想知道如何在文件中执行此操作,以及b)在最终位于单独的数据库操作文件中的情况下。
我想允许用户保存到他最近加载的文件,所以我希望我的loaddatabase()
函数为文件名定义一个全局char *,然后savedatabase()
函数可以访问
如果我在任何函数之外声明一个char *,它是只读的,并且尝试向其写入文件名会导致段错误。
如果我在loaddatabase()
函数中声明它,savedatabase()
无法访问它。
声明变量static会允许其他函数访问它,或者如果没有,我如何允许两个函数访问相同的char *?
答案 0 :(得分:2)
您可以通过在单个.c
文件中定义全局变量来定义全局变量:
char * database;
并在.h
文件中声明:
extern char * database;
并在每个使用该变量的文件中包含.h
文件。
extern 关键字声明变量而不定义它。它说编译器该变量存在于另一个文件中。
因此,对于您的问题,您可以在加载/保存函数的文件中定义char * database
,并在主函数的文件中声明它(extern char * database
)。
如果您不想为文件名分配和释放内存,则可以使用char database[1024]
而不是char * database
执行相同的操作。这样您就可以直接写入数据库。
答案 1 :(得分:1)
您需要声明一个字符数组,即char filename [260]。