命令行参数倒退?

时间:2015-11-08 06:10:21

标签: c++

所以你们都可能会笑一笑,但我是新手想成为有问题的编码员。是的,我知道可能是蹩脚而明显的答案,但现在就是。

#include <iostream>
#include <cstdlib>
using namespace std;

int main(int argc, char *argv[]) {
  for(int i=argc; i<=argc; i--){
    cout << argv[i] <<endl;
    }

 }

为什么我会遇到段错误?当我调整它时,我没有输出。

2 个答案:

答案 0 :(得分:3)

此:

for(int i=argc; i<=argc; i--)

应该是

for(int i = argc - 1; i >= 0; i--)

,因为

  1. 您的循环终止条件错误
  2. 数组索引从0开始,以长度结束 - 1(注意:对于argvargv[argc]NULL
  3. 如果您不想包含第一个参数(程序名称),请将>=更改为>

答案 1 :(得分:0)

for循环的编码方式,i <= argc始终为true。因此循环永远不会结束。只要i-1,您就会最终访问内存超出范围。这是未定义行为的原因。在您的情况下,未定义的行为表现为分段错误。

您需要使用i > 0作为for语句的条件。

请记住,argv[0]是程序名称。该计划的参数从argv[1]开始。