【发布时间】:2017-09-16 23:38:21
【问题描述】:
这段 C 代码的输出是什么(不带任何命令行参数运行)?
#include <stdio.h>
int main(int argc, char *argv[])
{
while (*argv != NULL)
printf("%s\n", *(argv++));
return 0;
}
在这个程序中,argv给出了char指针数组的基地址
while(*argv !=NULL)
条件为真,这应该给出编译时错误,因为
*(argv++),不是吗?但它显示了一些输出,为什么?
【问题讨论】:
-
在显示的代码中,
char *argv[]与char **argv完全相同 100%。我更喜欢最后一种格式:任何地方都没有数组。您可能想阅读c-faq 的第 6 部分。 -
@pmg: true - 我想我对 conceptual 数组(在这种情况下是一个连续的指针序列)和严格的“C 语言”中的数组进行了心理区分律师”的感觉。
-
@Ananya:
./prog是命令行的第一部分——通常是用来调用程序的名称(但不一定)。在这种情况下,它只是运行一个名为prog的程序,没有更多的命令行参数。没有编译错误,因为代码没有任何问题。 -
@Ananya:您阅读以下任何答案和cmets 吗?
argv[]包含程序名称(在元素 0 中)和任何命令行参数(在元素 1..argc-1 中)。
标签: c command-line-arguments argv argc