Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нужна подсказка по С.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
smk
Ниже приведен кусок кода. Код работает. Как я понимаю условие перестанет выполняться, если очередной байт будет равен нулю. Так? Ну из этого проистекает другой вопрос, а с чего это байт, следующий за последним байтом в массиве, будет 0? Как это работает, чего я не понимаю?

Код
unsigned char HELLO[]="Hello, I'm STM8S105C6, but who are you?";
unsigned char *byteNum = HELLO; // Указатель на передаваемый байт.

void UART2_TXE(void) interrupt 20
    {
        if (*byteNum)
            {
                UART2_DR=*byteNum; // Отправить байт.
                byteNum++;
            }
        else UART2_CR2 &= ~(1<<7); // Запретить прерывания по TXE, всё передано.
    }
xemul
Цитата(smk @ Jan 19 2012, 16:23) *
а с чего это байт, следующий за последним байтом в массиве, будет 0?

В "" в C задаются строковые константы. Любой букварь по С скажет, что строка — это одномерный массив символов, заканчивающийся нулевым символом.
'\0' в конце строковой константы добавляет компилятор, размер массива должен этот '\0' учитывать.
smk
Цитата(xemul @ Jan 19 2012, 14:38) *
В "" в C задаются строковые константы. Любой букварь по С скажет, что строка — это одномерный массив символов, заканчивающийся нулевым символом.
'\0' в конце строки добавляет компилятор, размер массива должен этот '\0' учитывать.

Спасибо. Теперь ясно. А то я по другим букварям учился да и не доходило дело до таких тонкостей, а тут увидел и задумался.
xemul
Цитата(smk @ Jan 19 2012, 16:41) *
не доходило дело до таких тонкостей

Константная строка - стандартный тип данных в С.
(а ASCIIZ представление без дополнительных проверок - источник (похоже, неиссякаемый) ошибок и уязвимостей типа "buffer overflow")
sparcmaster
Цитата(smk @ Jan 19 2012, 16:41) *
Спасибо. Теперь ясно. А то я по другим букварям учился да и не доходило дело до таких тонкостей, а тут увидел и задумался.

Вот вам Букварь по которому надо учиться.
Сергей Борщ
QUOTE (sparcmaster @ Jan 19 2012, 15:09) *
Вот вам Букварь по которому надо учиться.
Это действительно букварь, но учиться надо не по этому экземпляру, а по второму или третьему изданию, оно легко находится в интернете.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.