在 c 的 main 中传递参数

Posted

技术标签:

【中文标题】在 c 的 main 中传递参数【英文标题】:passing arguments in main in c 【发布时间】:2017-01-03 18:04:39 【问题描述】:

我正在努力接受一个参数名称并将其传递给我制作的程序。我制作了 C 代码 (copy.c),它接收文件名并在 Linux 控制台终端中打印出来。简单地说,当我这样做时它会起作用:

./copy filename.txt

这很好用,就像 cat 会产生的一样。

但是,当我放:

./copy < filename.txt

所以我认为“来解决它

有没有办法解决这个问题?如果是“123 filename.txt”,则可以。

这是我的副本.c:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
//#include <string.h>
#define bufferSize 200

int main(int argc, char* argv[])

    char buffer[bufferSize];
    int fd;
    int argu_no = 1;

    printf("%s %s\n\n", argv[0], argv[1]); //check for the argument names
    return 0;

当我执行“./copy 123 filename.txt”时:

123 filename.txt

出现。

但是当我执行“./copy

(null) XDG_SESSION_ID=2231

出来。请帮助我的程序接受整个“

我在 linux 上使用 GNU 库进行 C 编程。

【问题讨论】:

./copy "&lt;" filename.txt" 我正在尝试让 copy.c 接受不以您建议的双引号开头的参数。 引号不会在参数中传递。如果你想明确地传递引号,你必须用反斜杠转义它们。 我第一条评论中的错字,我的意思是:./copy "&lt;" filename.txt 欢迎来到 Stack Overflow。请注意,在这里说“谢谢”的首选方式是投票赞成好的问题和有用的答案(一旦你有足够的声誉这样做),并接受对你提出的任何问题最有帮助的答案(这也给出了你的声誉小幅提升)。请查看About 页面以及How do I ask questions here? 和What do I do when someone answers my question? 【参考方案1】:

shell解释:

./copy < filename.txt

并将&lt;filename.txt 视为将标准输入设置到指定文件的指令,并且这些不会作为参数传递给您的程序。所以这个调用在没有额外参数的情况下运行./copy(并且标准输入来自文件而不是终端)。

如果您希望 &lt; 作为参数传递(以及文件名),请引用它:

./copy '<' filename.txt
./copy "<" filename.txt
./copy \<  filename.txt

如果文件名中有空格,你也需要引用它。

【讨论】:

以上是关于在 c 的 main 中传递参数的主要内容,如果未能解决你的问题,请参考以下文章

main是啥意思,在C语言中又是啥意思

进程中参数的传递

传递命令行参数示例代码 (C 和 Python)

Matlab调用可执行程序传递参数以及接收输出

Matlab调用可执行程序传递参数以及接收输出

Java中eclipse与命令行向main函数传递参数