[英]Array of pointers to strings
我們知道c在字符數組的末尾自動插入NULL(\\ 0),但是為什么它沒有在指向字符串的指針數組的末尾插入NULL字符。
對於示例:如果我寫
char name[]={40,20,30,20,22,22,'c','a','b'}
NULL字符將被自動添加。 但是,如果我創建一個指針類型為Char的數組,則不會在該數組的末尾添加一個空字符。
char *names[]={"aaa","bbb","cccc"}
您的理解不正確。 你說,
對於示例:如果我寫
char name[]={40,20,30,20,22,22,'c','a','b'}
NULL字符將被自動添加。
那是不對的。
如果您使用:
char name[] = "abc";
將添加一個終止的空字符,但不會以您使用的形式出現。
C 沒有做到這一點對字符數組(或任何其他陣列的這個問題),它會為字符串文字,如"xyzzy"
。 ISO C標准C11 6.4.5 String literals /7
的相關位:
在轉換階段7中,一個或多個字符串文字產生的每個多字節字符序列將附加一個零值的字節或代碼。 然后,多字節字符序列用於初始化一個足以包含該序列的靜態存儲持續時間和長度數組。
對於字符串文字,數組元素的類型為char,並使用多字節字符序列的各個字節進行初始化。
這樣做的原因是因為它知道您希望字符串以null終止,否則它們實際上根本不是C字符串。
如果您確實在非字符串文字字符數組name
的末尾找到了終止符,那純粹是巧合,並且依靠它很容易進入未定義的行為范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.