【问题标题】:How to handle file handling with functions imported from another file in C?如何使用从 C 中的另一个文件导入的函数处理文件处理?
【发布时间】:2021-11-13 08:15:05
【问题描述】:

这就是我的文件结构的样子

这是我文件中的文本

fun.h

void fun()
{
    FILE *filePointer ;
    char i[20],p[20];
    filePointer = fopen("pass", "r") ;
    fscanf(filePointer,"%s %s",i,p);
    printf("%s %s",i,p);    
}

./pas/pass

inside inside

ma​​in.c

#include <stdio.h>
#include "./pas/fun.h"
int main( )
{   
    fun();
}

通过

outside
outside

当我运行 main.c 时,输出是:

也就是说fun里面的代码是在fun.h被导入的file_handling目录里面寻找pass文件,这完全可以理解。 但这并不能解决我的问题。

想要的是,无论我在哪里包含 fun.h 文件,它都应该只在 pas 目录中搜索该文件。

我该怎么做?

【问题讨论】:

  • 您的文件结构图像应该包括可执行文件的位置。
  • 我知道但是,有什么办法可以解决这个问题,因为我正在使用 C 库,所以用户将包含我的 .h 文件,现在我不知道路径是什么用户的可运行文件。
  • 不要在 .h 文件中定义函数。它们应该只包含声明。这些函数应该在 .c 文件中定义一次。然后客户端文件包括 .h 文件,并且您链接 与从.c 文件生成的目标文件。您现在所拥有的将无法在具有多个使用您的函数的源文件的任何应用程序中正常工作。
  • @TomKarzes 你能否澄清一下“与 .c 文件生成的目标文件的链接”是什么意思。
  • fun.h 中输入void fun(void);(你有一个不完整的原型,带有未指定的参数——(void)解决了这个问题)。然后在fun.c 中,放入fun 的定义(还添加了缺少的(void))。将fun.ccc -c fun.c 编译成fun.o。同样,编译main.ccc -c main.c 生成main.o 然后生成链接的可执行文件,执行cc -o main main.o fun.o 这就是多文件C 程序的构建方式。

标签: c include file-handling


【解决方案1】:

解决方案 1:

~ 使用绝对路径。

~ 例子:

filePointer = fopen("/home/user/my/path/to/directory/executable", "r");

解决方案 2:

~ 在主目录(file_handling)中运行你的程序。

~由于C打开文件,这应该可以工作:

filePointer = fopen("pass", "r");

~ 主目录中的那个。

【讨论】:

  • 以上两种解决方案都不能解决我的问题。我不知道包含当前文件的绝对路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
相关资源
最近更新 更多