KDB C++ API:创建字符串列表
KDB C++ API: creating a list of strings
我无法在 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
"00"
代替“00”的地方可能是重复两次的其他随机字符串。看来,我确实创建了一个字符串列表,但无论出于何种原因,该列表都包含垃圾。你能帮我理解我做错了什么吗?
感谢您的帮助!
您正在使用 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;
}
用于加载库和调用 C 函数的示例 Q 代码 - 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 NONEXPIRE
createStrListStatic
("hello";"world")
createStrListDynamic
("hello";"world")
我无法在 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
"00"
代替“00”的地方可能是重复两次的其他随机字符串。看来,我确实创建了一个字符串列表,但无论出于何种原因,该列表都包含垃圾。你能帮我理解我做错了什么吗?
感谢您的帮助!
您正在使用 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;
}
用于加载库和调用 C 函数的示例 Q 代码 - 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 NONEXPIRE
createStrListStatic
("hello";"world")
createStrListDynamic
("hello";"world")