Посмотри в документации или в учебнике по С раздел про строковые константы - '\0' в конце добавляется автоматически.
- только если явно указанная размерность массива соответствует длине или больше длины инициализиующей строки.
Уважаемый "прохвессор", вы вообще о чём? Какие массивы? Перечитайте внимательно то, что вы процитировали.
А может вы сначала дочитаете до конца Букварь K&R?
... а потом станете рассуждать?
Пользователь решил продолжить мысль 11 Апреля 2012, 23:02:56:
(Никто никуда никакой '\0', конечно, не "добавляет" - просто этот '\0' в конце уже записан в вашей инициализирующей строке - константе.)
Ну и кто же "записал" этот самый '\0' в конце инициализирующей строки-константы? Если некоторые товарищи в конце каждой константной строки самостоятельно всегда дописывает '\0' - это исключительно их проблемы.
Толкую для ... "самых-самых из танка":
- когда
в любом месте программного кода С (это может быть инициализация, как у вас, параметром в printf(), в любых функциях вида str*() - в
любом контексте) появляется запись вида: "abcdefghijklmnopqrstuvwxyz" - то она представляет собой литеральную константу длины 27, с '\0' записанным последним 27-м байтом, хотя вы в записи и указали 26 знаков...
- и вот это представление того, что нужно занести (в инициализируемую переменную),
вместе со своим завершающим '\0', и является значением, которое копируется в вашу переменную включая и завершающий '\0';
- и как бы вы не записывали литеральные константы, и что бы вы туда внутрь не записывали, у вас
нет никакого способа предотвратить дополнение записанного вами литеральным нулём: как только вы записали где-то "XYZ", вы записали массив с элементами 'X', 'Y', 'Z', '\0'.
Вот так я внятно излагаю?
Пользователь решил продолжить мысль 11 Апреля 2012, 23:10:40:
Посмотри в документации или в учебнике по С раздел про строковые константы - '\0' в конце добавляется автоматически.
- только если явно указанная размерность массива соответствует длине или больше длины инициализиующей строки.
Уважаемый "прохвессор", вы вообще о чём? Какие массивы? Перечитайте внимательно то, что вы процитировали.
О-ба-на
Я вообще то предполагал, что ... к окончанию среднеобразовательной школы все её выпускники (кто датянул до окончания) знают, что в С существует
единственный способ представления символьных строк: это массив, массив байт если это старое char представление, массив многобайтных символов, если это mbchar (UTF-8) или wchar (UTF-32) ... но это
всегда - массив.
Мне по простоте душевной как-то не представлялось, что в раздел "Программирование" заходят индивидуумы, которые ещё до этого места не дочитали K&R.
Прошу прощения за напряг.
Пользователь решил продолжить мысль 11 Апреля 2012, 23:29:00:
Толкую для ... "самых-самых из танка":
Я тут в помощь "танкистам" написал иллюстрирующую программку - сильно просветляет: чем
размер массива, содержащего литеральную строку, отличается от
длины строки (а отличается он ровно на 1). Впишите для значения STROKA любую приятную вам строку:
#include <stdio.h>
#include <string.h>
#define STROKA "1234"
int main( void ) {
printf( "%d - %d\n", sizeof( STROKA ), strlen( STROKA ) );
return 0;
}
... и наслаждайтесь:
$ gcc ascii3.c -o ascii3
$ ./ascii3
5 - 4