KDB C ++ API: создание списка строк

Я не могу создать список строк в KDB C ++ API. Это то, что я делаю:

 K lst = ktn(KC,0);
jk(&lst, kp((S)"str_1"));
jk(&lst, kp((S)"str_2"));
r1(lst);
k(h, (S)"{show type x}" , lst, (K)0);
r1(lst);
k(h, (S)"{show count x}", lst, (K)0);
r1(lst);
k(h, (S)"{show x}"      , lst, (K)0);

Выход

10h
2
"\260\260"

Где вместо «\ 260 \ 260» может быть какая-то другая случайная строка, повторенная дважды. Кажется, я создаю список строк, но список содержит мусор по любой причине. Не могли бы вы помочь мне понять, что я здесь делаю не так?

Спасибо за помощь!

0

Решение

Вы инициализируете список с типом char (KC), так что это будет список символов, а не список строк.

Список строк — это список смешанных типов, так как это список списков символов в Kdb. Поэтому вам нужно инициализировать список с типом 0 (смешанный тип списка).


Пример кода C — strList.c:

#define KXVER 3
#include "k.h"
K createStrListStatic(K x){
K strList = ktn(0,2);
kK(strList)[0] = kp("hello");
kK(strList)[1] = kp("world");
return strList;
}

K createStrListDynamic(K x){
K strList = ktn(0,1);
kK(strList)[0] = kp("hello");
js(&strList, (S)kp("world"));
return strList;
}

Пример кода Q для загрузки библиотеки & вызовите C funcs — strList.q:

createStrListStatic:`:strList 2:(`createStrListStatic;1);
createStrListDynamic:`:strList 2:(`createStrListDynamic;1);

-1 "\ncreateStrListStatic";
-1 "\t",.Q.s1 createStrListStatic[];
-1 "\ncreateStrListDynamic";
-1 "\t",.Q.s1 createStrListDynamic[];

Скомпилируйте и запустите следующим образом:

$ gcc -shared -m32 -fPIC strList.c -o strList.so && LD_LIBRARY_PATH="." q strList.q
KDB+ 3.4 2016.10.27 Copyright (C) 1993-2016 Kx Systems
l32/ 8()core 7982MB salih glyph01 127.0.1.1 NONEXPIREcreateStrListStatic
("hello";"world")

createStrListDynamic
("hello";"world")
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]