2014-02-16 74 views
0

從數組中打印元素會導致中止。中止消息表示無效的空指針。VS在打印字符串數組元素時中止 - C++

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    int day = 5, year = 2015; 

    const string months[13] = { 0, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; 

    cout << months[5] << " " << day << ", " << year << endl; 
} 

回答

1

std::basic_string<T>(T* arg)構造必須arg指着T數組被調用。

您正在構建std::string0,因此您的arg是空指針。這是未定義的行爲(並且在Microsoft的實現中,它在調試模式下由assert進行檢查;這就是您接收調試斷言窗口的原因)。

例改寫明確顯示錯誤:

char* s = 0; 
std::string str(s); // string will try to access null pointer here 

必須要麼刪除此0從數組或使它成爲一個字符串文字:"0"

請注意,C++是一種強類型語言。您可以只將相同類型或派生類型的對象存儲在數組中。

0

什麼是0在你的數組中做什麼?

const string months[13] = { 0, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; 
          ^^^ 

刪除它,你應該沒問題。

0

將0作爲字符串「0」。 這會導致你的數組的第一個元素設置爲空

然後重複,將達到5個元素被中斷,導致NPE