Когда/почему «\ 0» необходимо отметить конец массива (символов)?
Завершающий ноль необходим, если массив символов содержит строку. Это позволяет найти точку, где заканчивается строка.
Что касается вашего примера, то, как я думаю, выглядит следующим образом
char line[100] = "hello\n";
тогда для начала строковый литерал имеет 7
символов. Это строка, включающая завершающий ноль. Этот строковый литерал имеет тип char[7]
. Вы можете представить это как
char no_name[] = { 'h', 'e', 'l', 'l', 'o', '\n', '\0' };
Когда строковый литерал используется для инициализации массива символов, все его символы используются в качестве инициализаторов. Таким образом, относительно примера семь символов строкового литерала используются для инициализации первых 7 элементов массива. Все остальные элементы массива, которые не были инициализированы символами строкового литерала, будут неявно инициализированы нулями.
Если вы хотите определить, как долго строка хранится в массиве символов, вы можете использовать стандартную функцию C strlen
, объявленную в заголовке <string.h>
. Он возвращает количество символов в массиве до завершающего нуля.
Рассмотрим следующий пример
#include <stdio.h>
#include <string.h>
int main(void)
{
char line[100] = "hello\n";
printf( "The size of 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 of the array is 100
and the length of the stored string
hello
is 6
В C вы можете использовать строковый литерал для инициализации массива символов, за исключением завершающего нуля строкового литерала. Например
char line[6] = "hello\n";
В этом случае вы не можете сказать, что массив содержит строку, потому что последовательность символов, хранящихся в массиве, не имеет завершающего нуля.
person
Vlad from Moscow
schedule
26.11.2016