lleo (lleo) wrote,
lleo
lleo

Categories:

гребаный C++

это перепост заметки, оригинал находится на моем сайте: https://lleo.me/dnevnik/2019/12/29_1

Слушайте, ну это мистика. В C++ Ардуино есть такой объект String, который в работу не в пример удобнее, чем char. Если нужно String превратить в char, то есть специальная функция .c_str() То есть, вот так работает:

String id = "ESP8266-test";
String login = "lleo";
String password = "h2dtGdGH";
client.connect( id.c_str() , login.c_str() , password.c_str() );

Везде и всегда, где нужно char, это работало. Но лишь в одной из функций одной библиотеки PubSubClient эта херня не работает! А у меня все параметры хранятся именно в String и брать их нужно оттуда.

В примерах у них конечно всё работает:

client.setServer("tailor.cloudmqtt.com",12399);

А вот так — нет:

String URL = "tailor.cloudmqtt.com";
client.setServer(URL.c_str(),12399);

Почему — загадка. В PubSubClient.h
обозначено так:

boolean connect(const char* id, const char* user, const char* pass);
PubSubClient& setServer(const char * domain, uint16_t port);

Вышел из положения, временно нагуглив какую-то дикую конструкцию:

String URL = "tailor.cloudmqtt.com";
unsigned char* buf = new unsigned char[256];
URL.getBytes(buf, 256, 0);
const char *str = (const char*)buf;
client.setServer(str,12399);

Вот только это и сработало. Как думаете, что это, и почему во всех остальных функциях даже той же библиотеки все было норм?

UPD: Мне написали, что, вероятно, моя переменная исчезает раньше, чем функция ее использует... Это не совсем так. Волею судеб переменные этого рода у меня глобальные - они хранятся в объявленной глобально структуре как String имя и String значение. Специальная моя функция Srting CF(String имя) ищет "переменную" с этим именем и возвращает ее значение. То есть, в реальности это не URL.c_str(), а результат функции CF("url").c_str() Вот не пойму: с одной стороны все это реально хранится в глобальном пространстве и деться никуда не может. С другой стороны - это лишь нету результат, который вернула некая функция. И компилятор может его не хранить.



это перепост заметки, оригинал находится на моем сайте: https://lleo.me/dnevnik/2019/12/29_1
Tags: программирование, электроника
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 3 comments