2013-10-31 40 views
-2

我不明白爲什麼這不會在Visual Studio 2012爲什麼我的程序會崩潰(C++)?

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

char nullChar() 
{ 
    char ch; 

    int ran = (rand() % 52); 

    if (ran < 26) 
     { 
      ch = (char) ('a'+ ran); 
     } 
    else 
     { 
      ch = (char) ('A'+ ran - 26); 
     } 

    return ch; 
} 

int main(int argc, char *argv[]) 
{ 
    cout << "Enter a string"; 

    int nullNum = 0; 
    nullNum = atoi(argv[2]); 

    if (strcmp(argv[1], "-d") == 0) 
     { 
      int count = -1; 

      do 
       { 
        int c = cin.get(); 
        count++; 

        if(count == nullNum) 
         { 
          cout.put(c); 
          count = -1; 
         } 

       } while (!cin.eof()) ; 
     } 

    if(strcmp(argv[1], "-e") == 0) 
     { 
      char c = cin.get(); 

      while(!cin.eof()) 
       { 
        for (int i = -1; i < (nullNum-1); ++i) 
         { 
          cout << nullChar(); 
         } 

        cout << c; 
        c = cin.get(); 
       } 
     } 


} 

正常運行的代碼編譯完美。我懷疑一個循環中的東西,但我無法弄清楚。我也認爲它幾天前完美運行,但現在不是。那可能嗎?

+3

你試過使用調試器嗎?並且你如何運行程序...例如,你提供至少兩個命令行參數,對吧? – trojanfoe

+2

「不能正常運行」是對問題的完全無用的描述。輸出是否錯誤?它是否陷入了無限循環?它是否會崩潰,如果是這樣,有什麼信息?給我們一些東西在這裏工作。我不會告訴你一張汽車的照片,並說「爲什麼不開始?」。 –

+0

錯誤是什麼?什麼是你正在調用你的程序的論點? –

回答

2

我不知道你是否傳遞了一個參數。但除此之外,您應該在使用argv [xyz]之前始終檢查argc。我的猜測是你得到一個segfault,因爲沒有argv [1]和argv [2]