我一直在尝试解决这个问题,但无法理解。 如果从命令行运行以下程序(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: - )
答案 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)
您的代码中存在两个问题:
--sizeof argv is illegal
。这会导致错误。
while(sizeof argv)
将导致无限循环,因为条件始终为真
因此,简而言之,代码将无法编译,并将导致错误。
答案 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
}