何時/爲什麼'\ 0'需要標記(char)數組的結尾?
如果字符數組包含字符串,則終止零是必需的。這允許找到一個字符串結束的地方。
至於你的例子,因爲我覺得看起來下列方式
char line[100] = "hello\n";
那麼對於初學者字符串文字具有7
字符。它是一個字符串幷包含終止零。該字符串文字的類型爲char[7]
。你可以把它想象喜歡
char no_name[] = { 'h', 'e', 'l', 'l', '\n', '\0' };
當一個字符串文字是用來初始化字符數組那麼它的所有字符都用作初始化值。因此,相對於該示例,字符串文字的七個字符用於初始化數組的前7個元素。數組中所有未被字符串字符初始化的其他元素將被零隱式地初始化。
如果要確定存儲在字符數組中的字符串有多長,可以使用標頭<string.h>
中聲明的標準C函數strlen
。它返回終止零之前數組中的字符數。
考慮下面的例子
#include <stdio.h>
#include <string.h>
int main(void)
{
char line[100] = "hello\n";
printf("The size pf the array is %zu"
"\nand the length of the stored string \n%s is %zu\n",
sizeof(line), line, strlen(line));
return 0;
}
它的輸出是
The size pf the array is 100
and the length of the stored string
hello
is 6
在C你可以使用一個字符串來初始化一個字符數組不包括字符串常量的終止零。例如
char line[6] = "hello\n";
在這種情況下,你可能不說,數組包含字符串,因爲存儲在陣列中的符號序列不具有終止零。
\ 0用於標記C中字符串的結尾。大多數C std庫函數都需要以此方式終止字符串才能工作。 – Outshined
由於C不知道你的字符串有多長,你必須用\ 0標記結尾,以便知道它已經到達字符串的末尾。 –
你也可以在C中使用Pascal字符串。當然,現有的功能不會期望這樣他們不會一起工作。 – harold