【问题标题】:Saving input file name as a string? C [closed]将输入文件名保存为字符串? C [关闭]
【发布时间】:2015-04-16 01:26:53
【问题描述】:

我阅读了所有我能找到的主题,但找不到完全的答案 - 所以我希望这不会被视为重复。

我的作业需要读入一个文件,进行一些字符串比较,然后打印出该文件的名称。

这是非常基本的,输出只是以下格式:

*File where answer was found*
**Input1.txt** < file name

当我读入文件时,有什么方法可以将文件名保存为字符串?我是 C 的新手,所以我找到的很多答案(从文件描述等中获取)都在我脑海中。

谢谢!

编辑 - 对于我提供的信息不足,我深表歉意。我想太多了。我正在寻找的只是:

char filename[] = "input1.txt";
FILE *input = fopen("input1.txt","r");

【问题讨论】:

  • 您首先要如何打开要阅读的文件?你需要它的名字,作为一个字符串。你没有理由失去它。
  • 如果您需要 C 语言的答案,这将与您在其他地方阅读的内容相同。你到底想要什么?
  • fopenfgetsstrcmp如果你想搜索文件你可以使用glob

标签: c file input


【解决方案1】:

好吧,为了打开一个文件,你必须将它的 name (char *) 作为参数传递给 fopen 或 open ...

那么为什么不保留该字符串(文件名),直到您完成查找关键字并在需要时显示它。

例如,如果您打开这样的文件:

char filename[] = "file.txt"; FILE *fp = fopen(filename,"r"); // 打开文件名进行读取

// 这里检查文件是否包含关键字 // 如果是你显示文件名的情况

printf("%s",filename);

如果你使用系统调用“open”,一切都会是一样的,但你将处理文件描述符而不是文件指针。

有关更多信息,请阅读 fopen/open 手册。

【讨论】:

  • 这正是我想要弄清楚的!谢谢!我想我想得太苦了,没有意识到它是多么简单。再次感谢!
【解决方案2】:

尽管你的问题有点模糊,但我想回答如下;

首先,您要在类 Unix 操作系统的终端上执行这些操作,对吗?因此,i/o 重定向 可能会成为您的朋友。您的标准 C 程序的入口点是这样的:

int main(int argc, char* argv[]) { // ... }

第一个参数argc表示输入参数的总数(参数计数)。主函数的第二个参数,argv 表示参数向量(或简单地说,参数数组)并允许您从终端的 stdin 输入参数(默认重定向到键盘)这意味着,在执行 C 程序时,您可以在外部输入参数,也可以在类 Unix 系统中使用 pipes,这要感谢 Douglas McIlroy 在开发过程中发明并坚持将这个概念放在 Unix 中。因此,在您的程序中,您可以通过从键盘输入如下字符来打印您的参数(技术上称为 option):

int main(int argc, char* argv[])
{
   printf("%s\n", argv[1]);
   return 0;
}

在终端上:

$> ./program filename.txt

filename.txt

其实上面的代码示例只是一个演示。实际上,您不应该以这种方式编写程序。至此,我想给大家介绍一下getopt函数,它们是用来正确解析命令行选项的。

现在,根据你的问题,我猜你正在尝试做这样的事情:

// pseudo-code sample:
main()
{
   get_filename_to_search();
   compare_filename_with_others(); // I suppose, you're reading these names from a file
   if(filename_found == true)
     print(file_name);
   exit();
}

我不会按照上面的逻辑为你编写完整的 C 代码。因为这是你的任务,你需要自己研究和做。但是,我可以为您提供一些提示。您可以通过研究这些函数来连接点,以下是其中的一些:getoptfopenfclosefreadstrcmpprintfexit。我希望,我的帖子对你有帮助,祝你好运。

【讨论】:

  • 非常感谢您提供令人难以置信的详细回复!我仍然不太了解您写的所有内容,但会花时间研究它并进行更多研究!再次感谢您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
  • 2018-01-17
相关资源
最近更新 更多