2015-11-08 156 views
0

所以你們都可能會笑,但我是一個新手想成爲一個有問題的編碼器。是的,我知道可能是蹩腳的,明顯的答案,但在這裏。命令行參數向後?

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

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

} 

爲什麼我得到段錯誤?當我調整它時,我沒有輸出。

+3

'for(int i = argc; i <= argc; i - )'這個循環何時結束? – Pang

回答

0

for循環進行編碼的方式,i <= argc將始終爲true。因此循環將永遠不會結束。只要i-1,您最終將訪問內存越界。這是未定義行爲的原因。在你的情況下,未定義的行爲表現爲分段錯誤。

您需要使用i > 0作爲條件的for語句。

請記住argv[0]是程序名稱。該計劃的參數從argv[1]開始。

3

此:

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

應該

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

因爲

  1. 你的條件循環的結束是錯誤的
  2. 數組下標從0和月底開始的長度 - 1 (注意:對於argv,argv[argc]NULL

變化>=>,如果你不希望包含的第一個參數(節目的名稱)。