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

 
 
> Как я получил Адъ, sizeof string
ViKo
сообщение May 12 2015, 07:42
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Создал строку:
char *Buff = "Hello, ViKo!\r\n";
Передаю раз в секунду через CDC в STM32F3Discovery:
CDC_Transmit_FS((uint8_t *)Buff, sizeof Buff);
Получаю в терминальной программе:
HellHellHellHell...

Передаю иначе:
CDC_Transmit_FS((uint8_t *)Buff, sizeof *Buff);
Получаю:
HHHH...

Что же, компилятор не знает длину строки, что хранит в своих таблицах?

P.S. Естественно, когда пишу
CDC_Transmit_FS((uint8_t *)Buff, 14);
то все нормально.

P.P.S. и скобками аргумент для sizeof обкладывал, не помогло.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
V_G
сообщение May 12 2015, 07:50
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Поищите в вашей версии Си функцию типа strlen.
Использовать функцию sizeof для строки некорректно, она для другого предназначена.

ЗЫ. Посмотрите в отладчике, ваша строка, размещенная в памяти, нулем завершается? Все функции вычисления длины строки ищут окончание в виде нулевого байта.
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 12 2015, 08:05
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(V_G @ May 12 2015, 10:50) *
Поищите в вашей версии Си функцию типа strlen.
Использовать функцию sizeof для строки некорректно, она для другого предназначена.

ЗЫ. Посмотрите в отладчике, ваша строка, размещенная в памяти, нулем завершается? Все функции вычисления длины строки ищут окончание в виде нулевого байта.

Нулем завершается, конечно.
Написал по-простому:
char Buff[] = "Hello, ViKo!\r\n";
CDC_Transmit_FS((uint8_t *)Buff, sizeof Buff);
Все передается, и нуль тоже.
Hello, ViKo!<\r><\n><\0>

Мне непонятно, sizeof указателя должен же быть равен 4 для Cortex. Почему один символ передается?
Так нормально работает, спасибо!
char *Buff = "Hello, ViKo!\r\n";
CDC_Transmit_FS((uint8_t *)Buff, strlen (Buff));
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 12 2015, 08:21
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ViKo @ May 12 2015, 11:05) *
Мне непонятно, sizeof указателя должен же быть равен 4 для Cortex. Почему один символ передается?

Все правильно, для первого примера:
sizeof(Buff) возвращает размер указателя на char
sizeof(*Buff) возвращает размер char
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ViKo   Как я получил Адъ   May 12 2015, 07:42
- - CrimsonPig   Цитата(ViKo @ May 12 2015, 08:42) Что же,...   May 12 2015, 08:18
- - ViKo   О, спасибо! Действительно, все оказалось прост...   May 12 2015, 08:24
|- - aaarrr   Цитата(ViKo @ May 12 2015, 11:24) А длину...   May 12 2015, 08:29
- - ViKo   Однако, sizeof вычисляется на этапе компиляции (об...   May 12 2015, 16:15
|- - CrimsonPig   Цитата(ViKo @ May 12 2015, 17:15) Можно п...   May 12 2015, 17:12
||- - ViKo   Цитата(CrimsonPig @ May 12 2015, 20:12) Н...   May 12 2015, 18:44
|- - demiurg_spb   Цитата(ViKo @ May 12 2015, 19:15) Однако,...   May 13 2015, 14:47
- - desh   ЦитатаА длину строки, на которую указывает указате...   May 13 2015, 13:16
|- - Сергей Борщ   Цитата(desh @ May 13 2015, 16:16) Не вдав...   May 13 2015, 13:23
- - desh   Сергей, я Вас безмерно уважаю, но то что, так сдел...   May 13 2015, 14:07
- - Сергей Борщ   Цитата(desh @ May 13 2015, 17:07) Функция...   May 13 2015, 14:17
- - Эдди   Цитата(Сергей Борщ @ May 13 2015, 17:17) ...   May 13 2015, 15:32


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:57
Рейтинг@Mail.ru


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