字符串文字""
具有字符數組char[1]
的類型C和const char [1]
在C++中。
你可以把它想象以下方式
在C
chat no_name[] = { '\0' };
或 在C++
const chat no_name[] = { '\0' };
當一個字符串文字被用來初始化一個字符數組那麼它的所有字符都被用作初始值。因此,對於這個聲明
char text[10] = "";
你其實有
char text[10] = { '\0' };
陣列的所有其它字符沒有相應的初始化(除非是文字[0]的第一個字符),那麼他們將被初始化由0
從C標準(6.7.9初始化)
14的字符類別M的數組AY由字符串被初始化 字面或UTF-8字符串文字,任選在大括號。字符串常量的 連續字節(包括終止空 字符,如果有房間或如果陣列是未知大小的) 初始化數組的元素。
和
21如果在一個大括號內的列表更少初始化值多於 是元件或聚集體的成員,或在用於初始化的陣列的 字符串文字更少的字符已知的尺寸比有 是數組中的元素,所述聚集體的其餘部分應 初始化隱含的相同具有靜態存儲 持續時間的對象
,最後
10如果具有自動存儲持續時間的對象沒有初始化 明確地,它的值是不確定的。如果具有靜態 或線程存儲持續時間的對象未被明確初始化,則:
- 如果它具有指針類型,則將其初始化爲空指針;
- 如果它有算術類型,它被初始化爲(正或無符號)零;
- 如果它是一個聚合,每個成員根據這些規則初始化(遞歸) ,並且任何填充被初始化爲零位;
- 如果它是一個聯合,根據這些規則初始化第一個命名成員 (並遞歸),並且任何填充將 初始化爲零位;
類似的是用C++標準編寫的。
考慮到,在C您可以寫信例如通過以下方式
char text[5] = "Hello";
^^^
在這種情況下,字符數組將不會有終止零,因爲沒有準備的房間。 :)這是一樣的,如果你定義
char text[5] = { 'H', 'e', 'l', 'l', 'o' };
我會帶門#3,蒙蒂。這與'strncpy()'的作用無關。它應該做的是它指定要做的事情。 –
您詢問了C編譯器,但將其標記爲C和C++。 C和C++在這裏有一些不同之處,所以如果這不是你要求的,C++標籤是不合適的。 – hvd
@ hvd認爲我也將C++放在那裏,因爲如何處理這兩種情況會很有趣。但你說得對;文本本身並沒有提到C++ –