Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Передать строку из структуры в функицю |
Автор: Lockdog88 17.3.2017, 17:34 | ||||||
Добрый день! У меня есть структура в которой есть переменная uint8_t:
Я разбираю строку из UART'a и записываю необходимые данные в структуру:
Потом мне необходимо отправить эти данные по другому интерфейсу
Но на принимаемой стороне приходят пустые данные, но если я отправлю через функцию sendData просто строку символов в кавычках, то всё в порядке. В чём моя ошибка? Спасибо. |
Автор: vpf 17.3.2017, 20:06 |
Почему в вызове функции sendData((char*)nmea.checksum, 6); отсутствует знак & |
Автор: Lockdog88 17.3.2017, 21:28 | ||
Потому что тогда я получаю ошибку: error: pointer targets in passing argument 1 of 'sendData' differ in signedness UPD. Извиняюсь, это я объявление функции не поправил. Ошибки больше нет, но на принимаемой стороне так же пустая строка |
Автор: volatile 17.3.2017, 23:07 |
вы копируете в однобайтную переменную всю строку она затирает вашу структуру, и черт знает что еще, расположенное после. ps: такие приведения типов - верный путь прострелить себе ногу, |
Автор: Lockdog88 18.3.2017, 13:02 |
А как мне правильно сделать, подскажите, пожалуйста. Если я знаю длины всех полей, мне в структуре сделать переменные фиксированной длины? |
Автор: volatile 18.3.2017, 14:09 | ||
Чтоб ответить на ваш вопрос, нужно сначала понять что вы хотите сделать. Из вашего кода (не имеющего смысла), ничего не понятно. Например, если вы хотите хранить строку в структуре, и вы уверены что длина этой строки никогда не превысит допустим 15 байт, то соответственно:
|
Автор: Lockdog88 18.3.2017, 16:37 | ||||
Да, я хочу хранить данные фиксированного размера в структуре, далее, мне нужно эти данные отправить по радиоканалу, собственно, текущая функция, которая их отправляет (sendData) корректно работает, со строковыми константами (типа sendData("blah-blah"), 9);), но как передать в эту функцию переменную из структуры - у меня возникают проблемы. |
Автор: volatile 18.3.2017, 17:18 |
Lockdog88, что у вас в структуре? бинарные данные, и вам нужно их передать? |
Автор: Lockdog88 18.3.2017, 18:42 | ||
Там символьные данные. |
Автор: volatile 18.3.2017, 18:49 |
ну тогда смотри выше |
Автор: Lockdog88 19.3.2017, 17:25 | ||||||||
Сейчас делаю так:
Значение из структуры передаю в функцию так:
Но с другой стороны опять пустые данные |
Автор: volatile 19.3.2017, 18:07 |
Места для терминатора нет: больше вроде фатальных ошибок нет, и должно работать. Ели нет, то вы что-то не договариваете ![]() |
Автор: Lockdog88 19.3.2017, 18:15 |
Спасибо большое! Объясните дураку, что изменило добавление ещё одного байта? Там нуль-терминатор хранится? |
Автор: volatile 19.3.2017, 18:22 | ||
Да, строки в С/С++ имеют тенденцию оканчиваться нулём. ) Кстати если у вас строка жестко равна 6 байтам, можно отвести под них ровно 6 байт тогда вместо юзать
остальное без имзенений |
Автор: Lockdog88 19.3.2017, 20:30 |
Спасибо вам большое! |