对于这个程序,我应该将我的名字写入终端或用户给出的输出文件(O(nˆ2)
)。
case 'f'
当我想将我的名字写入终端时,我的代码有效,但当我想将我的名字写入用户提供的文件时,它不起作用。代码编译并运行,但文件不存在。
命令行中的文件可能尚不存在。我应该在程序中创建文件吗?
我明白我做错了什么。谢谢大家!
答案 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]
为-f
而argv
[2]
为my-output-file.txt
。 (argv[0]
是您的可执行文件的名称。)因此fopen(argv[1], ...)
不是您想要的;)。