С++. набрался теории, решил практиковаться.. в книге даётся два обсалютно идентичных способа объявления символьных массивов: Например Код (Text): char MyName[] = {'d','j','o','n','i','k'}; char MyName[] = "djonik"; если к обоим массивам применить функцию strlen(), то в первом случае значение будет равно 47, а во втором уже правильно 6! Почему так происходит? Самое интересное, когда писал генератор паролей и обнаружил эту тему, два раза пересчитывал английские буквы на клаве, strlen() вместо 26 выводила 31..
потому что ты забыл завершающий ноль в первом случае строки в Си обязаны заканчиваться нулевым байтом. правильно так: char MyName[] = {'d','j','o','n','i','k', 0}; strlen очень просто вычисляет длину - шагает дальше по памяти, пока не встретит нулевой байт. встретила - тогда длина строки равна тому, сколько байт она прошагала. а объявление строки через "abcdef" автоматически помещают завершающий ноль в конце. вот и все дела