将输入文件名保存为字符串? C

时间:2015-04-16 01:26:54

标签: c file input

我阅读了所有可以找到的主题并且找不到相应的答案 - 所以我希望这不会被视为重复。

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

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

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

当我在文件中读取时,有没有办法将文件名保存为字符串?我对C很陌生,所以我找到的很多答案(从文件描述中提取等等)都是我的头脑。

谢谢!

编辑 - 我为我提供的信息缺乏道歉。我过度思考这个问题。我一直在寻找的只是:

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

2 个答案:

答案 0 :(得分:1)

好吧,为了打开文件,您必须将名称(char *)作为参数传递给fopen或打开...

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

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

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

//在这里检查文件是否包含关键字 //如果是这种情况,则显示文件名

printf("%s",filename);

如果你使用sys-call“open”,那么每件事情都是一样的,但是你将处理文件描述符而不是文件指针。

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

答案 1 :(得分:1)

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

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

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

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

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代码。因为这是你的任务,你需要自己研究和完成。但是,我可以为您提供一些提示。您可以通过研究这些功能来连接点,其中一些是: getopt fopen fclose fread strcmp printf 退出。我希望,我的帖子对你有所帮助,祝你好运。