2013-07-30 24 views
31

:Boş sonlandırıcı ile biten dize değişmezleri fazladan boş sonlandırıcı içerir mi? Örneğin

char a[] = "abc\0"; 

standart C değerinin 0 başka bayt dizisi zaten sonunda sıfır olsa bile eklenmesi gerektiğini söylüyor mu? Yani, sizeof(a) 4 veya 5 eşittir?

+1

Sorunuzdaki İngilizcede kesinlikle yanlış bir şey yok. Ama cevabı basitçe denemedin mi? – Barmar

+2

Açık olmak isterseniz, şunu yazabilirsiniz: char [[] = {'a', 'b', 'c', '\ 0'}; '. Bu bir dize değişmezi olarak bildirilmez, bu yüzden fazladan sona eren bir null eklenmez. –

+0

Alternatif olarak, 'char a [4] =" abc \ 0 ";' yazabilirsiniz. – nwellnhof

cevap

50

Tüm dize değişmezleri, dizenin içeriğinden bağımsız olarak örtülü bir boş sonlandırıcıya sahiptir.

standart (6.4.5 Dizi Hazır) söyler:

bir bayt veya değeri sıfır kod dizisinden sabit veya değişmezleri sonuçlanan her baytlı bir karakter dizisine eklenir.

Yani, "abc\0" dizesi, açık olana ek olarak örtülü boş sonlandırıcıyı içerir. Yani, a dizisi 5 öğe içerir.

+0

'Yani, a dizisi 5 element içeriyor.' '4' elemanları mı demek istiyorsun? –

+10

@BikalGurung: Hayır, 5 doğru. {'a', 'b', 'c', '\ 0', '\ 0'} –

İlgili konular