找到C程序的输出

时间:2013-11-20 19:48:11

标签: c output command-line-arguments

我一直在尝试解决这个问题,但无法理解。 如果从命令行运行以下程序(myprog):

myprog friday tuesday sunday

输出是什么?

#include<stdio.h>
int main(int argc, char *argv[]){
    while(sizeof argv)
         printf("%s",argv[--sizeof argv]);
    return 0;
}

输出是 -

sunday tuesday friday myprog

请解释我的输出。 Thanx: - )

5 个答案:

答案 0 :(得分:2)

我猜你真的是这个。它只是向后打印命令行参数。

#include<stdio.h>

int main(int argc, char *argv[])
{
    while (argc)
        printf("%s ", argv[--argc]);

    printf("\n");

    return 0;
}

答案 1 :(得分:0)

错误:

  

左值作为递减操作数

它无法编译。

sizeof是一个与+%类似的运算符,它可以为您提供对象的大小。所以,你不能减少它。就像这样的事情没有任何意义:--%

问题的要点是:

  

如果输入是:myprog friday tuesday sunday

会发生什么      

代码执行时:

index = lastIndex
while(index) // note: while(0) == false
    print(array[--index])

因此,输出将是元素的逆转:

  星期二星期二星期天

答案 2 :(得分:0)

无视--sizeof问题,我假设你想知道argv的元素。 它包含参数和程序的名称。阅读任何描述argv的手册或文档。

答案 3 :(得分:0)

您的代码中存在两个问题:

  1. --sizeof argv is illegal。这会导致错误。

  2. while(sizeof argv)将导致无限循环,因为条件始终为真

  3. 因此,简而言之,代码将无法编译,并将导致错误。

答案 4 :(得分:0)

您可能希望了解C中的命令行参数处理。当您获得一些程序参数列表时,例如,

myprog friday tuesday sunday

C语言为main()函数提供了参数,这些参数提供了参数的数量(本例中为4),以及这些参数的char *(指针)数组。

请注意,sizeof argv是在编译时计算的,值是系统上指针的大小(4或8)。

首先,我们解释主函数的参数

int main(
    int argc, //an integer count of the number of arguments provided to the program
    char* argv[] //an array of pointers to character arguments
)

然后你的主函数被定义为(显然)打印出从最右边的参数开始并返回到第零个参数的参数,

{
    int argv_sizeof = argc; //you cannot use sizeof argv the way you specified
    //argv_sizeof = 4 in your example, but argv[4] is not valid
    //argv_sizeof has a value that is one past the rightmost element of argv[]
    while( argv_sizeof ) //use argv_sizeof > 0 here; argv_sizeof is 4,3,2,1,0
                         //when argv_sizeof reaches 0, the while loop terminates
    {
        printf("%s",argv[--argv_sizeof]); //here you pre-decrement argv_sizeof (3,2,1,0)
        //then use argv_sizeof to index into argv[]
        //then you print the string at argv[3], argv[2], argv[1], argv[0]
    }
    //argv_sizeof = 0 here
    return 0; //you return the value 0 from the main function
}