2017-08-07 53 views
0

我聽不太懂下面的代碼,得到()二維數組

static char s[N][N]; 

int i = 0; 
while(gets(s[i])) 
{ some loop, where i gets incremented } 

考慮數組是N維的,那麼會發生什麼時

gets(s) 

叫?它如何將整個字符串存儲在s [i]元素中?它感覺像s [i]應該等於輸入的第一個字符,而不是整個字符串。當它以更多的輸入循環時會發生什麼?重點是將其存儲爲

​​

它看起來像代碼目前正在做的。但我不明白如何。

編輯#1

很多人建議不要使用gets()函數,但爲什麼會得到()不恰當的時候不能有任何非法輸入和我想要的字符作爲元素存儲在數組中而不是一個字符串?

+2

不要使用裸露的數組,也不要使用裸指針。事實上,遠離任何裸體。使用'std :: string','std :: vector','std :: array'等。 –

+0

此代碼複製自https://quickgrid.wordpress.com/2015/09/28/uva-problem- 424-整數探究溶液/。我只是試圖瞭解解決方案。 –

+2

不要在C++中使用'gets'。它已被棄用,並已被刪除。 – NathanOliver

回答

2

s[i]元素是一個字符數組,因爲s是一個數組數組。可以使用字符數組來存儲字符串,方法是使用零字符(稱爲「nul」)來標記結尾。

0

實施例:

int multi_array[2][2] = {{2,3,4}, 
         {7,8,9}, 
         {1,5,0}}; 

Array[n][m]

獲取 第一位置Array[0][0]

第二位置Array[0][1]

位置0,1爲3

位置1,2是9

位置2,2,是0

0

上面的代碼存儲所述字符串,但使用一個編號的索引。 但是將數字索引存儲在數組的第一維中。這樣它

想,我想存儲256個字符的最大尺寸的10串:

int main() 
{ 
    char s[10][256]; 

    for (int i = 0; i < 10; i++) { 
     gets(s[i]); 
    } 
    for (int i = 0; i < 10; i++) { 
      cout << s[i] << endl; 
    } 
} 

cout << s[1][2] << endl; 

注:在上面的代碼,它會輸出第二個條目中的最後一行(我們訂購一切從0-9)和該條目字符串的第三個字符。 因此,如果我的輸入是test2,那麼輸出將是's'。

注意:調用gets(s)是不正確的,因爲它不會被編譯,也不是代碼的意圖。

gets()調用具有某些功能,如果輸入未被監視,可能會導致您陷入緩衝區溢出問題。