【发布时间】:2017-07-14 11:12:13
【问题描述】:
为什么下面的argc的输出会有差异?
第一:
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
int main(int argc,char *argv[])
{
for(int i=1;i<=argc;i++)
std::cout<<argv[i]<<"\n"<<std::endl;
std::cout<<argc<<std::endl;
return 0;
}
我得到了 argv 的输出,但是我没有得到 argc 的输出。
第二种情况:
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
int main(int argc,char *argv[])
{
std::cout<<argc<<std::endl;
for(int i=1;i<=argc;i++)
std::cout<<argv[i]<<"\n"<<std::endl;
return 0;
}
我得到了 argv 和 argc 的输出。
在这两种情况下,如果我使用“printf”而不是“cout”,我都会得到 argc 的输出。
为什么argc的输出会有差异?
【问题讨论】:
-
i<=argc导致未定义的行为。如果argc为2,则有效的argv索引为argv[0]和argv[1]。argv[2]是未定义的行为。 -
碰巧
std::cout机制会混淆,因为您在代码中访问argv[argc]。如果您在std::cout<<argc<<std::endl;之前运行fprintf(stdout, "%d\n", argc);,也许您可以获得argc的值(就像我一样)。无论如何:总是< argc,就像其他人告诉你的那样。