程序不使用命令行中指定的名称创建文件

时间:2016-10-10 19:59:47

标签: c command-line-arguments fopen getopt

对于这个程序,我应该将我的名字写入终端或用户给出的输出文件(O(nˆ2))。

case 'f'

当我想将我的名字写入终端时,我的代码有效,但当我想将我的名字写入用户提供的文件时,它不起作用。代码编译并运行,但文件不存在。

命令行中的文件可能尚不存在。我应该在程序中创建文件吗?

我明白我做错了什么。谢谢大家!

1 个答案:

答案 0 :(得分:4)

除了评论者所说的内容之外,您正在使用getopt进行部分解析,因此应该将其用于其余部分!

int main...
char *filename;    /**1**/
...
  case 'f': 
    fFlag = 1;
    filename = optarg;  /**2**/
....
  FILE *file = fopen(filename , "w");  /**3**/

说明:f:getopt表示getopt将尝试查找与f一起使用的选项。在getopt循环案例'f'中,该选项放在变量optarg中。至少对于GNU getopt,这是指向argv的指针,因此您不必复制它。您可以将其指针值(上面的*2*)存入您为此目的创建的变量(*1*)。然后,您可以打开该特定文件,而不考虑argv*3*)中的位置。请参阅GNU getopt example中选项c的处理方法。

编辑您没有显示您正在使用的命令行,但我猜它是类似

./foo -f my-output-file.txt

- 在这种情况下argv[1]-fargv [2] my-output-file.txt。 (argv[0]是您的可执行文件的名称。)因此fopen(argv[1], ...)不是您想要的;)。