Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在执行C程序时传递文件名_C_Bash_Terminal_Arguments_Command Line Arguments - Fatal编程技术网

如何在执行C程序时传递文件名

如何在执行C程序时传递文件名,c,bash,terminal,arguments,command-line-arguments,C,Bash,Terminal,Arguments,Command Line Arguments,我试图在我的C程序中不硬编码输入文件的名称。当我硬编码文件名时,所有其他组件都在工作。但希望能够传递一个字符串文件名。 我试图执行一个名为Matrix.c的文件,并将其可执行文件命名为Matrix 所以,在终端中,当我到达我的工作目录时 gcc -g Matrix.c -o matrix 然后当我编译 ./matrix 它没有一个文件名传递给它,所以我要检查它,让用户输入一个文件名来加载 但是,当有人传递文件名时,是否应将其传递为: ./matrix filename.txt 或 /ma

我试图在我的C程序中不硬编码输入文件的名称。当我硬编码文件名时,所有其他组件都在工作。但希望能够传递一个字符串文件名。 我试图执行一个名为
Matrix.c
的文件,并将其可执行文件命名为
Matrix

所以,在终端中,当我到达我的工作目录时

gcc -g Matrix.c -o matrix
然后当我编译

./matrix 
它没有一个文件名传递给它,所以我要检查它,让用户输入一个文件名来加载

但是,当有人传递文件名时,是否应将其传递为:

./matrix filename.txt

/matrix
使用后一个选项,我似乎无法从
argv[1]
获取传递给函数的参数名称-它只是“(Null)”


我知道这是一个非常简单的问题。但我是不是完全疯了?这和我在OSX El Capitan上运行有关吗。我知道我在argv[1..argc-1]中使用了命令的“参数


argv[1..argc-1]中有从“参数重定向到命令的命令


从'重定向的问题主要是shell如何工作。使用时:

./matrix filename.txt
./matrix < filename.txt
然后给程序两个参数——程序名和文件名。使用时:

./matrix filename.txt
./matrix < filename.txt
/matrix
然后只给程序一个参数——程序名,shell安排它的标准输入来自文件(文件名不会传递给程序)


任何一种都可以发挥作用;你只需要决定你要支持哪一个。如果用户键入
/matrix file1.txt file2.txt file3.txt
,会发生什么情况?传统行为的一个版本是依次处理每个文件,将每组结果写入标准输出。有很多替代行为——其中大多数都曾被某个人在某个时候使用过。在没有指定文件名的情况下读取标准输入是一种常见的操作模式(想想
cat
grep
和…。

问题主要是shell如何工作。使用时:

./matrix filename.txt
./matrix < filename.txt
然后给程序两个参数——程序名和文件名。使用时:

./matrix filename.txt
./matrix < filename.txt
/matrix
然后只给程序一个参数——程序名,shell安排它的标准输入来自文件(文件名不会传递给程序)


任何一种都可以发挥作用;你只需要决定你要支持哪一个。如果用户键入
/matrix file1.txt file2.txt file3.txt
,会发生什么情况?传统行为的一个版本是依次处理每个文件,将每组结果写入标准输出。有很多替代行为——其中大多数都曾被某个人在某个时候使用过。在没有指定文件名的情况下从标准输入读取是一种常见的操作模式(想想
cat
grep
和…。

我环顾四周,发现有很多不同的解决方案和不同的处理方法。你能给我们看一下
matrix.c
的代码吗?使用时使用
重定向将输入从文件名重定向到程序。欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请看这一页,我也四处看看,有很多不同的解决方案和不同的处理方法。你能给我们看看
matrix.c
的代码吗?使用时使用
重定向将输入从文件名重定向到程序。欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请看这一页,也谢谢你的澄清。我刚刚修复了它,并尝试解决所有三种输入模式。ThanksI经常使用类似于
int processor(FILE*fp,const char*fn)
的函数,该函数从流
fp
读取输入,流是打开的文件
fn
(或“标准输入”的伪名称),有时使用额外的参数
FILE*ofp
来指定输出应该写入哪个文件。“成功”的返回值为0,失败的返回值为其他任何值。然后,主程序中的代码可以很容易地调用
processor()
。实际上,我有一组函数处理零个或多个剩余参数的处理,因此
main()
结束
返回过滤器(argc、argv、optind、processor)
isatty()
在这里可能很有用,请参见感谢您的澄清。我刚刚修复了它,并尝试解决所有三种输入模式。ThanksI经常使用类似于
int processor(FILE*fp,const char*fn)
的函数,该函数从流
fp
读取输入,流是打开的文件
fn
(或“标准输入”的伪名称),有时使用额外的参数
FILE*ofp
来指定输出应该写入哪个文件。“成功”的返回值为0,失败的返回值为其他任何值。然后,主程序中的代码可以很容易地调用
processor()
。实际上,我有一组函数处理零个或多个剩余参数的处理,因此
main()
结束
返回过滤器(argc、argv、optind、processor)
isatty()
在这里可能很有用,请参见感谢您的澄清。我刚把它修好,试了试t