Привет всем. Кто подскажет, почему следующий код срабатывает.
#include <iostream>
int main()
{
const char ca[] = {'h','e','l','l','o'}; // Строка *без* \0 в конце
const char *cp = ca;
while (*cp) {
std::cout << *cp << std::endl;
++cp;
}
return 0;
}
Вывод:
h
e
l
l
o
Дело в том, что если бы я массив ca[] инициализировал не явно (как в примере), а с помощью строкового литерала, то, да, в конце должен был бы быть символ \0 и всё должно бы было работать, как выше. Но почему и здесь оно работает? (про std::string и прочее знаю, интересует именно подход в данном случае и строки в стиле С).