Привет.
Тут такое дело.
Есть сторонняя либа, которой я пользуюсь.
Есть функция задания параметров.
setoptions(URL, url);
второй параметр char*.
Так проблема в том что если делать
setoptions(URL, "ftp://localhost");
то работает
а если
char* url = (char*)malloc(512);
strcpy(url, "ftp://");
strcat(url, host); //char* host = "localhost";
setoptions(URL, url);
какая разница, можете обьяснить.
Здравствуйте, Аноним, Вы писали:
А>второй параметр char*.
А>Так проблема в том что если делать
[сcode]
setoptions(URL, "
ftp://localhost");
[/сcode]
А>то работает
А>а если
char* url = (char*)malloc(512);
strcpy(url, "ftp://");
strcat(url, host); //char* host = "localhost";
setoptions(URL, url);
А>какая разница, можете обьяснить.
на первый взгляд никакой, но не ясно как не работает. не видно что такое host, не видно когда и как освобождатся память, нет уверенности, что палки прямые, а не косые \\
Здравствуйте, Аноним, Вы писали:
А>Есть сторонняя либа, которой я пользуюсь.
А>Есть функция задания параметров.
(пропущен код)
А>какая разница, можете обьяснить.
Возможно, дело в заоптимизированности библиотеки. Формулируется примерно так:
"Обычно этот строковый параметр должен быть известен на этапе компиляции, поэтому достаточно хранить только указатель, а не всю строку."
В таком случае можно:
1) поменять библиотеку,
2) завести статический буфер для каждого из возможных значений (или для каждого из параметров),
3) выделять память под строки в неком пуле и управлять их временем жизни централизованно.
static char url[512];
strcpy(url, "ftp://");
strcat(url, host); //char* host = "localhost";
setoptions(URL, url);
Попробуйте использовать преобразования const_cast, если это возможно. Преобразуйте ваш char* в const char*. Возможно поможет.
Здравствуйте, Аноним, Вы писали:
А>Привет.
А>Тут такое дело.
А>Есть сторонняя либа, которой я пользуюсь.
А>Есть функция задания параметров.
А>А> setoptions(URL, url);
А>
А>второй параметр char*.
А>Так проблема в том что если делать
А>А> setoptions(URL, "ftp://localhost");
А>
А>то работает
А>а если
А>А> char* url = (char*)malloc(512);
А> strcpy(url, "ftp://");
А> strcat(url, host); //char* host = "localhost";
А> setoptions(URL, url);
А>
А>какая разница, можете обьяснить.
а '\0' в конце строки есть