2013-12-09 188 views
0

这是一个非常基本的问题,但我无法在任何地方找到明确的答案。 我理解的主要参数,只要它们指的是什么:C - 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; 
} 

上述代码应该带3个参数并将第2个参数的内容复制到第3个参数的位置。我该怎么做才能发生?

+0

您似乎在这里提出两个问题,它们似乎没有关系。第一个 - “这些论据都存储在哪里” - 没有任何意义。它们作为函数'main()'的参数提供。 –

+0

为了理解这里发生了什么,首先在'if(argc!= 3)'行设置一个断点,然后检查'argc'和'argv'的内容。 –

+0

@sudowned我想一个更好的措辞它是我如何提供参数的命令提示符?我似乎无法达到命令提示符接受任何输入的地步。 – Aleyha

回答

1

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

不理解命令行参数的语法。

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

命令行参数的语义是由程序定义的...在这种情况下,第一个参数是输入文件的名称,第二个参数是输出文件的名称。

printf("Usage: filename infile outfile\n"); 

这不是一个很好的用法消息......在“文件名”应该是你的程序,这是一般的argv的值的名称[0]。因此:

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

从技术上讲,第一个参数是程序的位置之后的短语?或者该程序的位置被认为是第一个参数? – Aleyha

+0

@Aleyha前者。第一个参数是infile,第二个参数是outfile。虽然程序路径在argv(argv [0])中,但它不被视为或称为参数。 –

+0

但程序路径仍然算argc正确吗? – Aleyha