KDB C ++ API:创建字符串列表

时间:2017-04-28 19:32:44

标签: c++ string list api kdb

我无法在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"可能是一些其他随机字符串重复两次。看来,我确实创建了一个字符串列表,但是无论出于何种原因,该列表都包含垃圾。你能帮我理解我在这里做错了吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您正在使用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代码加载lib&调用C函数 - 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")