2010-06-01 37 views
3

我把C++,因爲我只是在C#中開始,我不知道是否有差異。未填充數組(C++)中的最後一項是什麼?

如果你聲明數組

,並通過改編價值觀填寫ARR [0] [8],什麼樣的價值將被放置在ARR [9]?

a space''?終結線'\ n'? '\ 0'?或者它什麼都沒有?

我問這個,因爲我一直使用的戰術是這樣

char word[20]; 
for(count = 0 ; count < 20 ; count++) 
{ 
    cout << word[count]; 
} 

打印數組的全部內容,而且,我在想​​,如果我可以把它簡化 (例如,如果最後入口是「\ 0」)通過使用這樣的

char word[20]; 
while(word[count] != '\0') 
{ 
    cout << word[count]; 
} 

的東西,這樣,我就不必記住許多數據是如何進入到一個數組,如果所有的空間都沒有填滿。

如果您知道更快的方式,請告訴我。我傾向於在數組上犯一堆錯誤。

+3

「我把C++放在C++中,因爲我剛剛開始使用C#,我不確定是否有區別。」這是個很大的差異。 – 2010-06-01 22:47:54

+2

我認爲@Mark嚴重低估了巨大的單詞。它應該是大膽的,眨眼睛,並有良好的效果。 – JaredPar 2010-06-01 22:49:33

+0

@JaredPar:和''也一樣。 – 2010-06-01 22:50:05

回答

5

用於構建的字符陣列中的C#語法是:

char[] arr = new char[10]; 

陣列中的所有值都被初始化爲'\0'

也許List<char>會更適合你的情況,你不知道你需要多少個字符。另一個需要考慮的選項是StringBuilder。如果你不需要可變性,或者使用string

+0

+1表示提示。 – 2010-06-01 22:58:19

+0

好的。列表,我沒有聽說過。那是C#還是C++? 謝謝! – superlazyname 2010-06-01 23:00:23

+1

@jwaffe:C#。'List'的C++等價物是'std :: vector'。你應該真正決定你想要編程的語言。從你的問題來看,你是否想要C++或C#的答案是非常不清楚的。 – 2010-06-01 23:02:35

2

在C++中,聲明爲char word[20]的數組實際上在每個條目處都會有垃圾。它不像C#那樣有很好的默認值,而是可能只是擁有先前佔用內存中特定位置的內容。總之,不要相信價值,除非你自己明確地設定了它。

+0

+1,儘管有些第三方內存管理庫會覆蓋他們使用衆所周知的(他們)模式管理的堆,以檢測緩衝區溢出,新增/刪除問題等。 – 2010-06-01 22:52:12

+1

這是真的,但並不是非常有用並沒有回答這個問題。 – 2010-06-01 22:53:21

+1

@jwaffe:假設數組在堆棧上分配。存在的「垃圾」是以前在該地址使用堆棧的內容:局部變量,返回地址,無論如何。假設數組在堆上分配。存在的垃圾是以前在該地址使用堆的任何內容:空閒列表指針,塊大小,舊數據等等。因爲像C++這樣的語言不能保證內存的內容,所以它們節省了必須對它進行初始化的開銷。這個策略引起的錯誤和病毒的成本會轉嫁給你。 – 2010-06-01 23:01:40

相關問題