Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.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-main()命令行参数_C_Command Line_Parameters_Main - Fatal编程技术网

C-main()命令行参数

C-main()命令行参数,c,command-line,parameters,main,C,Command Line,Parameters,Main,这是一个非常基本的问题,但我在任何地方都找不到明确的答案。 我了解main的参数,就其所指内容而言: int main(int argc, char *argv[]) 其中argc表示命令行参数的数量,argv表示保存每个字符串的数组。我从.c文件创建了一个源代码的exe文件,但没有命令提示方面的经验,也不理解命令行参数的语法 #include <stdio.h> #include <string.h> #include <stdlib.h> int m

这是一个非常基本的问题,但我在任何地方都找不到明确的答案。 我了解main的参数,就其所指内容而言:

int main(int argc, char *argv[])
其中argc表示命令行参数的数量,argv表示保存每个字符串的数组。我从.c文件创建了一个源代码的exe文件,但没有命令提示方面的经验,也不理解命令行参数的语法

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{
    FILE *infile, *outfile;
    int iochar;

    if(argc != 3){
        printf("Usage: filename infile outfile\n");
        exit(1);
    }

    if((infile = fopen(argv[1], "r")) == NULL){
        printf("Can't open input file.\n");
        exit(1);
    }

    if((outfile = fopen(argv[2], "w")) == NULL){
        printf("Can't open output file.\n");
        exit(1);
    }

    while((iochar = getc(infile))!=EOF){
        putc(iochar, outfile);
    }

    fclose(infile);
    fclose(outfile);

    printf("You've reached the end of the program.\n"); 

    return;
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
文件*infile,*outfile;
int-iochar;
如果(argc!=3){
printf(“用法:文件名填充输出文件\n”);
出口(1);
}
if((infle=fopen(argv[1],“r”)==NULL){
printf(“无法打开输入文件。\n”);
出口(1);
}
if((outfile=fopen(argv[2],“w”)==NULL){
printf(“无法打开输出文件。\n”);
出口(1);
}
而((iochar=getc(infle))!=EOF){
putc(iochar,outfile);
}
fclose(infle);
fclose(输出文件);
printf(“您已到达程序的末尾。\n”);
返回;
}

前面的代码应该包含3个参数,并将第2个参数的内容复制到第3个参数的位置。要实现这一点,我必须做些什么?

您可以在VS项目的调试属性中设置命令行参数

不理解命令行参数的语法

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{
    FILE *infile, *outfile;
    int iochar;

    if(argc != 3){
        printf("Usage: filename infile outfile\n");
        exit(1);
    }

    if((infile = fopen(argv[1], "r")) == NULL){
        printf("Can't open input file.\n");
        exit(1);
    }

    if((outfile = fopen(argv[2], "w")) == NULL){
        printf("Can't open output file.\n");
        exit(1);
    }

    while((iochar = getc(infile))!=EOF){
        putc(iochar, outfile);
    }

    fclose(infile);
    fclose(outfile);

    printf("You've reached the end of the program.\n"); 

    return;
}
命令行参数的语法细节取决于解释它们的程序。。。VS、Windows快捷方式、Windows cmd、bash等。。。但一般来说,它只是一个由空格分隔的项目列表。如果项目本身包含空格、引号或其他特殊字符,则需要注意正在使用的解释器的规则

命令行参数的语义由程序定义。。。在本例中,第一个参数是输入文件的名称,第二个参数是输出文件的名称

printf("Usage: filename infile outfile\n");
这不是一个好的用法消息。。。“filename”应该是程序名,通常是argv[0]的值。因此:

printf("Usage: %s infile outfile\n", argv[0]);

你似乎在问两个问题,这两个问题似乎并不相关。第一个“这些参数都存储在哪里”没有任何意义。它们是作为函数
main()
的参数提供的。要了解这里发生了什么,首先在
if(argc!=3)
行上设置一个断点,然后检查
argc
argv
@sudowned的内容。我想更好的措辞是如何将参数提供给命令提示符?我似乎永远都无法达到命令提示符接受任何输入的程度。您不执行或运行.c文件。这是你的源代码。您需要先将其编译成可执行文件。
printf(“无法打开输入文件。\n”)
是无用错误消息的典型示例。哪个文件?你为什么不能打开它?为什么将错误消息打印到stdout而不是stderr?用
perror(argv[1])
替换这行可怕的代码,并对所有其他错误消息进行类似的替换。因此,从技术上讲,第一个参数是程序位置后的短语?还是程序的位置被认为是第一个参数?@Aleyha是前者。第一个参数是infile,第二个参数是outfile。虽然程序路径在argv(argv[0])中,但它不被视为或称为参数。@Aleyha是,argc是argv中的元素数,不包括终止的NULL。在你的情况下,argc是3。最后一个问题,抱歉打扰了。我尝试将解决方案资源管理器->属性->调试->命令参数设置为3(如果VS 2012是这样解释参数的,那么是2吗?)。但是,这仍然没有为我显示命令提示符。通过设置命令行项目的调试属性,您的意思是什么?@Aleyha您需要两个参数——实际参数,而不是数字。然后点击F5,你的程序应该运行,复制文件,然后退出。。。不会有任何命令提示。您可以在程序的开始处设置断点(双击第一个if语句的边距,您应该会得到一个红色圆圈),断点将停止在那里,您可以单步执行程序。我敦促您阅读VS帮助以熟悉它——它非常强大,稍后将对您有所帮助。(注意:我主要在VS中处理GUI程序,而不是控制台应用程序,因此我在这里的评论可能会有点偏离。)