Dr Arthur
Новичок
обработка строк в С функции в PostgreSQL
написал функцию на С, котрая парсит строки.
Когда выполняю функцию в консоли Linux, все работает отлично, когда инсталирую ее в PostgreSQL, сишные функции для работы со строками выдают неверные результаты. Например, strlen() всегда выдает 1, strcpy() копирует пустую строку. strchr() возвращает пустой указатель. Я подозреваю, что проблема с передачей переменных во внутрь функции.
Вот несколько простых примеров, демонстрируующих проблему:
возвращает 1, должно возвращать реальную длину стоки
возвращает пустую строку
это работает правильно
это тоже работает правильно
Функцию инсталировал таким образом:
CREATE FUNCTION strfunc(varchar) RETURNS integer
AS '/var/lib/pgsql/strfunc.so' , 'strfunc'
LANGUAGE 'C';
Пробовал на PostgreSQL 7.3.2 и 7.3.4
Помогите, пожалуйста.
написал функцию на С, котрая парсит строки.
Когда выполняю функцию в консоли Linux, все работает отлично, когда инсталирую ее в PostgreSQL, сишные функции для работы со строками выдают неверные результаты. Например, strlen() всегда выдает 1, strcpy() копирует пустую строку. strchr() возвращает пустой указатель. Я подозреваю, что проблема с передачей переменных во внутрь функции.
Вот несколько простых примеров, демонстрируующих проблему:
PHP:
int strfunc(char * st1)
{
return strlen(st1);
}
PHP:
char *strfunc2(char * st1)
{
static char res[20] = "";
strcpy(res, st1);
return res;
}
PHP:
char *strfunc3(char * st1)
{
return st1;
}
PHP:
int strfunc4()
{
static char res[20] = "test this";
return strlen(res);
}
Функцию инсталировал таким образом:
CREATE FUNCTION strfunc(varchar) RETURNS integer
AS '/var/lib/pgsql/strfunc.so' , 'strfunc'
LANGUAGE 'C';
Пробовал на PostgreSQL 7.3.2 и 7.3.4
Помогите, пожалуйста.