2012-05-19 251 views
0

能有人請解釋我爲什麼它不可能把一個'\0'字符的給定數組中:陣列初始化

char a[]={'r','b'}; 

a[2]='\0'; 

應該不是上面的代碼放在一個空字符在第三位,因此轉換字符數組a到字符串。

+0

您可以採用'char a [3] = {'r','b'};'並且您有足夠的定義內存來放置[2]。 – user411313

+0

約翰納什問這樣的基本問題? naaaahhhh .. /) –

+0

仍在學習C。 –

回答

8

您正在寫入陣列邊界之後:當您使用兩個字符初始化陣列時,最後一個有效索引是1,而不是2

你應該有三個項目初始化數組,如下所示:

char a[] = {'r', 'b', '\0'}; 

你還可使用此版本:

char a[] = "rb"; 

這會給你一個零陣列終止的字符串裏面。

+0

是的,這是有道理的。感謝您的及時回覆。 –

+0

因爲我是新手,可以幫我找到接受按鈕。謝謝。 –

+0

@JohnNash答案旁邊有複選標記的輪廓。 – dasblinkenlight

1

C中的字符串被實現爲一個字符數組,並以空值'\ 0'結尾。只要說char* a = "rb";。 (記得包含string.h)

0

雖然TeoUltimus的回答是正確的,但請注意,他的情況下指針'a'將指向字符串文字。這意味着你永遠不能修改字符串。更具體地說,雖然代碼a[1] = 'c';將被編譯,但運行它將導致錯誤。如果您打算修改字符串中的單個元素,請編寫char a[] = "ab"。 有關詳細信息,請參閱:https://www.securecoding.cert.org/confluence/display/seccode/STR30-C.+Do+not+attempt+to+modify+string+literals

+0

謝謝,這當然有幫助! –