所以你们都可能会笑一笑,但我是新手想成为有问题的编码员。是的,我知道可能是蹩脚而明显的答案,但现在就是。
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[]) {
for(int i=argc; i<=argc; i--){
cout << argv[i] <<endl;
}
}
为什么我会遇到段错误?当我调整它时,我没有输出。
答案 0 :(得分:3)
此:
for(int i=argc; i<=argc; i--)
应该是
for(int i = argc - 1; i >= 0; i--)
,因为
argv
,argv[argc]
为NULL
)如果您不想包含第一个参数(程序名称),请将>=
更改为>
。
答案 1 :(得分:0)
for
循环的编码方式,i <= argc
始终为true
。因此循环永远不会结束。只要i
为-1
,您就会最终访问内存超出范围。这是未定义行为的原因。在您的情况下,未定义的行为表现为分段错误。
您需要使用i > 0
作为for
语句的条件。
请记住,argv[0]
是程序名称。该计划的参数从argv[1]
开始。