Поскольку вы пометили вопрос как "C", так и "C ++", я отвечу на вопрос для обоих языков.
Предложение
s = "cool man army";
, где s
имеет тип char *
, допустимо только в C, но не в C ++. В C ++ переменная s
должна иметь тип const char *
, поскольку строковый литерал распадается до этого типа. Только в C строковый литерал затухает до типа char *
. Однако в обоих языках строковый литерал доступен только для чтения, даже если он не const
в C.
На современных 64-битных платформах указатели обычно являются 64-битными, поэтому sizeof(s)
составляет 8 байтов (что эквивалентно 64 битам). Строковый литерал "cool man army"
, тем не менее, является массивом, а не указателем (и также не уменьшается до единицы при использовании с оператором sizeof
). Следовательно, sizeof("cool man army")
- это фактическая длина массива (включая завершающий нулевой символ), которая равна 14.
РЕДАКТИРОВАТЬ: Между тем тег C ++ был удален из вопроса. Однако, поскольку это сделал не ОП, я не буду удалять свои комментарии о C ++ из своего ответа.