2012-07-30 120 views
0

可以使用字符作爲數組下標嗎?在C/C++中使用字符作爲數組下標字符

我的數組被初始化爲保存256個對象,所以看起來好像訪問超出範圍不成問題。但是,我得到了一些奇怪的分段錯誤,我發現這是由於我在某些情況下讀取的字符值是負值。

但是,我不知道這怎麼可能。然後,我將它轉換爲一個無符號的字符,但這也不起作用。我最終也遇到了邊界問題。我也嘗試將char變量轉換爲整數,然後訪問數組,但我仍然遇到了分割問題。

我能做些什麼來緩解這種情況?能夠通過字符訪問數組非常好,因爲我的程序在ASCII集中的每個字符都有一個數組單元格。這似乎是有道理的,但我不知道爲什麼它不工作。

+0

代碼在哪裏? – Jeeva 2012-07-30 05:33:38

+0

建議您編輯您的問題並向我們顯示您的代碼。會幫助很多。 – kingchris 2012-07-30 05:34:27

+1

字符可以是負值。投射到int將無濟於事,因爲負的字符將會變成負值。無論如何將Casting轉換爲無符號字符(或只是將變量聲明爲無符號字符)都可以工作,好像您在代碼中還有其他問題。 – jahhaj 2012-07-30 05:39:24

回答

3

將字符類型的值用作數組索引是完全有效的。數組索引可以是任何整數類型; char,unsigned charsigned char都是整數類型。

但是,普通的char可以是有符號的或無符號的,具體取決於實現。要麼它具有與signed char相同的範圍,要麼它具有與unsigned char相同的範圍;無論如何,它仍然是一個獨特的類型。

所以,如果你有256個元素的數組,你可以安全地unsigned char指數它,它的射程至少爲0〜255,你可以用char不能安全指數它,因爲它可能爲負值。

然後,我把它鑄造成一個無符號的字符,但那也沒用。我最終也遇到了邊界問題。

如果沒有更多信息,我不能幫上忙。

0

使用無符號字符應該解決一半的問題,儘管還有另一個邊界問題需要注意。另一個問題是,你可能訪問的元素超出了數組中最大數量的元素。下面是一個例子:

char myArray[256]; 
myArray[0] = 0; // Works just fine 
myArray[1] = 0; // Works just fine 
myArray[256] = 0; // Segfaults 

它出現segfaults因爲程序試圖訪問一個變量,它是從陣列(0到255)的邊界的。 這可能是這裏發生的事情,但我不能確定沒有代碼。

相關問題