如何从命令行定义文件名并将其传递给fopen()?
我有以下程序将用户的输入写入文件。 目前要写入的文件是预定义的; 但是,我希望允许用户从命令提示符定义文件名。 添加此function的最佳方法是什么? 我无法理解如何将用户输入的字符串作为fopen()函数中的参数。 我应该使用scanf()还是创建另一个getchar()while循环将chars存储在一个数组中,然后创建一个变量作为fopen()的参数或什么?
#include int main() { char c; FILE *fp; fp = fopen("file.txt", "w"); while ((c = getchar()) != EOF) { putc(c, fp); } return 0; }
这就是主要的论点:
#include int main(int argc, char **argv) { char c; FILE *fp; if (argc >= 2) fp = fopen(argv[1], "w"); else fp = fopen("file.txt", "w"); while ((c = getchar()) != EOF) { putc(c, fp); } return 0; }
如果你遵循这个,你可能想知道argv[0]
。 这就是程序名称的位置。 某些操作系统环境将可执行文件的完整路径放在那里。 其他人只放了程序名。 其他人仍然把打字输入。
对于命令../../bin/someprogram
在Windows上, argv[0]
是"C:\\Documents and Settings\\User\bin\\someprogram.exe"
在Linux / bash上, argv[0]
是../../bin/someprogram
在Ultrix / csh上,(我认为) argv[0]
是/home/username/bin/someprogram
使用argc和argv
#include int main(int argc, char **argv) { char c; FILE *fp; if(argc < 2){ printf("Usage : ./a.out "); exit(0); } fp = fopen(argv[1], "w"); while ((c = getchar()) != EOF) { putc(c, fp); } return 0; }
像这样定义main:
int main(int argc, char *argv[]) {
然后使用argv:命令行参数的数组。 argv [0]是在命令行输入的命令的名称,argv [1]是第一个参数。
fp = fopen(argv[1], "w');
您可能想要检查argc> 1以避免超出范围的数组访问。
有许多函数可以读取字符串; 例如, fgets
和scanf
。 问题是你需要知道你想要在之前阅读的最大字符数。 如果这对您没问题,请使用其中之一。 如果没有,那么你必须编写自己的函数来读取动态字符串, 就像这里一样 。