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