Я играл с массивами символов в С++ и написал эту программу:
int main()
{
char text[] = { 'h', 'e', 'l', 'l', 'o' }; //arrays initialised like this
//will have a size of the number
//of elements that you see
char text2[] = "hello"; //arrays initialised like this will have a size of
//the number of elements that you see + 1 (0 on the
//end to show where the end is
cout << endl;
cout << "The size of the first array is: " << sizeof(text) << endl;
cout << endl;
for (int i = 0; i < sizeof(text); i++)
{
cout << i << ":" << text[i] << endl;
}
cout << endl;
cout << "The size of the first array is: " << sizeof(text2) << endl;
cout << endl;
for (int i = 0; i < sizeof(text2); i++)
{
cout << i << ":" << text2[i] << endl;
}
cout << endl;
cin.get();
return 0;
}
Эта программа дает мне вывод:
The size of the first array is: 5
0:h
1:e
2:l
3:l
4:o
The size of the first array is: 6
0:h
1:e
2:l
3:l
4:o
5:
Мой вопрос: есть ли конкретная причина, по которой инициализация массива символов с отдельными символами не будет иметь нулевой терминатор (0) на конце, в отличие от инициализации массива символов строковым литералом?
char
имел неявно добавленный нуль, в то время как для строковых литералов это именно то, что вы хотите - person 463035818_is_not_a_number   schedule 06.04.2018{ 'h', 'e', 'l', 'l', 'o' }
), это то, что вы получаете. - person NathanOliver   schedule 06.04.2018char
, который не является строкой? Как я мог получить это иначе? - person BoBTFish   schedule 06.04.2018char
используется для хранения последовательностей символов.char
— это просто тип, подобныйint
илиfloat
, который может содержать некоторые значения. Использование в качестве строки — это всего лишь один вариант использования, хотя и очень распространенный. - person 463035818_is_not_a_number   schedule 06.04.2018