реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Нужна подсказка по С., Как оно работает?
smk
сообщение Jan 19 2012, 12:23
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Ниже приведен кусок кода. Код работает. Как я понимаю условие перестанет выполняться, если очередной байт будет равен нулю. Так? Ну из этого проистекает другой вопрос, а с чего это байт, следующий за последним байтом в массиве, будет 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, всё передано.
    }


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
xemul
сообщение Jan 19 2012, 12:38
Сообщение #2



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(smk @ Jan 19 2012, 16:23) *
а с чего это байт, следующий за последним байтом в массиве, будет 0?

В "" в C задаются строковые константы. Любой букварь по С скажет, что строка — это одномерный массив символов, заканчивающийся нулевым символом.
'\0' в конце строковой константы добавляет компилятор, размер массива должен этот '\0' учитывать.
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 19 2012, 12:41
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



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

Спасибо. Теперь ясно. А то я по другим букварям учился да и не доходило дело до таких тонкостей, а тут увидел и задумался.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
xemul
сообщение Jan 19 2012, 12:55
Сообщение #4



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(smk @ Jan 19 2012, 16:41) *
не доходило дело до таких тонкостей

Константная строка - стандартный тип данных в С.
(а ASCIIZ представление без дополнительных проверок - источник (похоже, неиссякаемый) ошибок и уязвимостей типа "buffer overflow")
Go to the top of the page
 
+Quote Post
sparcmaster
сообщение Jan 19 2012, 13:09
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 93
Регистрация: 13-01-12
Из: Гатчина
Пользователь №: 69 333



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

Вот вам Букварь по которому надо учиться.

Сообщение отредактировал sparcmaster - Jan 19 2012, 13:10
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 19 2012, 13:22
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (sparcmaster @ Jan 19 2012, 15:09) *
Вот вам Букварь по которому надо учиться.
Это действительно букварь, но учиться надо не по этому экземпляру, а по второму или третьему изданию, оно легко находится в интернете.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016