char* ????
От: Аноним  
Дата: 08.11.05 04:29
Оценка:
Привет.
Тут такое дело.

Есть сторонняя либа, которой я пользуюсь.
Есть функция задания параметров.

    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);

какая разница, можете обьяснить.
Re: char* ????
От: Сергей Мухин Россия  
Дата: 08.11.05 05:14
Оценка:
Здравствуйте, Аноним, Вы писали:

А>второй параметр 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, не видно когда и как освобождатся память, нет уверенности, что палки прямые, а не косые \\
---
С уважением,
Сергей Мухин
Re: char* ????
От: quantez  
Дата: 08.11.05 09:02
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть сторонняя либа, которой я пользуюсь.

А>Есть функция задания параметров.

(пропущен код)

А>какая разница, можете обьяснить.


Возможно, дело в заоптимизированности библиотеки. Формулируется примерно так:

"Обычно этот строковый параметр должен быть известен на этапе компиляции, поэтому достаточно хранить только указатель, а не всю строку."

В таком случае можно:
1) поменять библиотеку,
2) завести статический буфер для каждого из возможных значений (или для каждого из параметров),
3) выделять память под строки в неком пуле и управлять их временем жизни централизованно.

static char url[512];
strcpy(url, "ftp://");
strcat(url, host); //char* host = "localhost";
setoptions(URL, url);
Re: char* ????
От: Аноним  
Дата: 08.11.05 11:32
Оценка:
используйте curl
Re[2]: char* ????
От: Ильич  
Дата: 08.11.05 14:17
Оценка:
Попробуйте использовать преобразования const_cast, если это возможно. Преобразуйте ваш char* в const char*. Возможно поможет.
!!! БЕРИ ОТ ЖИЗНИ ВСЕ !!!
Re[3]: char* ????
От: Сергей Мухин Россия  
Дата: 08.11.05 14:20
Оценка:
Здравствуйте, Ильич, Вы писали:

И>Попробуйте использовать преобразования const_cast, если это возможно. Преобразуйте ваш char* в const char*. Возможно поможет.



в первом сообщ было сказано, что параметр char*!
---
С уважением,
Сергей Мухин
Re: char* ????
От: icWasya  
Дата: 08.11.05 14:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет.

А>Тут такое дело.

А>Есть сторонняя либа, которой я пользуюсь.

А>Есть функция задания параметров.

А>
А>    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' в конце строки есть
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.